From e916f41df26e33b01f1b3ebe28881090da3a7281 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 15 Feb 2023 18:19:57 +0100 Subject: [PATCH 001/815] fix(cache): hack to work around plugins trying to load relatve modules. Fixes #543 --- lua/lazy/core/cache.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 12515ec..8a02711 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -230,6 +230,14 @@ function Cache.find(modname, opts) modname = modname:gsub("/", ".") local basename = modname:gsub("%.", "/") local idx = modname:find(".", 1, true) + + -- HACK: some plugins try to load invalid relative paths (see #543) + if idx == 1 then + modname = modname:gsub("^%.+", "") + basename = modname:gsub("%.", "/") + idx = modname:find(".", 1, true) + end + local topmod = idx and modname:sub(1, idx - 1) or modname -- OPTIM: search for a directory first when topmod == modname From 6771c7e23c3ecdb50a9510c4cd5e1e0d2db9e5ca Mon Sep 17 00:00:00 2001 From: vanppo Date: Thu, 16 Feb 2023 19:33:53 +0800 Subject: [PATCH 002/815] fix(ui): disable folding of floating window (#550) --- lua/lazy/view/float.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 2a2cc5f..f0e719a 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -107,6 +107,7 @@ function M:mount() local function opts() vim.bo[self.buf].bufhidden = "wipe" vim.wo[self.win].conceallevel = 3 + vim.wo[self.win].foldenable = false vim.wo[self.win].spell = false vim.wo[self.win].wrap = true vim.wo[self.win].winhighlight = "Normal:LazyNormal" From 258ee6b30dd842bdd486da1ea8873644ed536a73 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 16 Feb 2023 11:34:49 +0000 Subject: [PATCH 003/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 388f622..07f69c8 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 15 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 16 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 8186cc5db31bd5968b5be838a30c4cf1465cb3f9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 16 Feb 2023 13:29:23 +0100 Subject: [PATCH 004/815] chore(main): release 9.8.3 (#549) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d568692..0ac92d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [9.8.3](https://github.com/folke/lazy.nvim/compare/v9.8.2...v9.8.3) (2023-02-16) + + +### Bug Fixes + +* **cache:** hack to work around plugins trying to load relatve modules. Fixes [#543](https://github.com/folke/lazy.nvim/issues/543) ([e916f41](https://github.com/folke/lazy.nvim/commit/e916f41df26e33b01f1b3ebe28881090da3a7281)) +* **ui:** disable folding of floating window ([#550](https://github.com/folke/lazy.nvim/issues/550)) ([6771c7e](https://github.com/folke/lazy.nvim/commit/6771c7e23c3ecdb50a9510c4cd5e1e0d2db9e5ca)) + ## [9.8.2](https://github.com/folke/lazy.nvim/compare/v9.8.1...v9.8.2) (2023-02-15) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index befd3bc..f1e5f3f 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -147,7 +147,7 @@ M.defaults = { debug = false, } -M.version = "9.8.2" -- x-release-please-version +M.version = "9.8.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 5cfe1560c551720bdc125e68431bacb836eb28d3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 17 Feb 2023 13:41:16 +0100 Subject: [PATCH 005/815] fix(ui): return abort key instead of `` --- lua/lazy/view/init.lua | 2 +- lua/lazy/view/render.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index efdb75e..b661d5a 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -77,7 +77,7 @@ function M.create() vim.keymap.set("n", ViewConfig.keys.abort, function() require("lazy.manage.process").abort() - return "" + return ViewConfig.keys.abort end, { silent = true, buffer = self.buf, expr = true }) -- plugin details diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 56ac095..6cf424c 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -160,7 +160,7 @@ end function M:help() self:append("Help", "LazyH2"):nl():nl() - self:append("Use "):append("", "LazySpecial"):append(" to abort all running tasks."):nl():nl() + self:append("Use "):append(ViewConfig.keys.abort, "LazySpecial"):append(" to abort all running tasks."):nl():nl() self:append("You can press "):append("", "LazySpecial"):append(" on a plugin to show its details."):nl():nl() From e5ba4434164f8ae9f88d5150018f229e3d0aa9a7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 17 Feb 2023 12:42:16 +0000 Subject: [PATCH 006/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 07f69c8..5753584 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 16 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 17 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From ff76e58961509038e3e0365c47580e595977a3a2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 17 Feb 2023 13:58:16 +0100 Subject: [PATCH 007/815] fix(spec): make sure imported specs are sorted alphabetically --- lua/lazy/core/plugin.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index b79cc6b..edd8ff0 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -254,7 +254,15 @@ function Spec:import(spec) self.modules[#self.modules + 1] = spec.import local imported = 0 + + ---@type string[] + local modnames = {} Util.lsmod(spec.import, function(modname) + modnames[#modnames + 1] = modname + end) + table.sort(modnames) + + for _, modname in ipairs(modnames) do imported = imported + 1 Util.track({ import = modname }) self.importing = modname @@ -273,7 +281,7 @@ function Spec:import(spec) Util.track() end, }) - end) + end if imported == 0 then self:error("No specs found for module " .. spec.import) end From f2cc9ef6acc7367c001b7507c82cab3ab7c29cae Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Feb 2023 17:06:19 +0100 Subject: [PATCH 008/815] chore(main): release 9.8.4 (#557) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ac92d0..5ed8af5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [9.8.4](https://github.com/folke/lazy.nvim/compare/v9.8.3...v9.8.4) (2023-02-17) + + +### Bug Fixes + +* **spec:** make sure imported specs are sorted alphabetically ([ff76e58](https://github.com/folke/lazy.nvim/commit/ff76e58961509038e3e0365c47580e595977a3a2)) +* **ui:** return abort key instead of `<c-c>` ([5cfe156](https://github.com/folke/lazy.nvim/commit/5cfe1560c551720bdc125e68431bacb836eb28d3)) + ## [9.8.3](https://github.com/folke/lazy.nvim/compare/v9.8.2...v9.8.3) (2023-02-16) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f1e5f3f..310e11c 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -147,7 +147,7 @@ M.defaults = { debug = false, } -M.version = "9.8.3" -- x-release-please-version +M.version = "9.8.4" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 7339145a223dab7e7ddccf0986ffbf9d2cb804e8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 17 Feb 2023 21:08:46 +0100 Subject: [PATCH 009/815] fix(ui): don't close on BufLeave. Fixes #561 --- lua/lazy/view/float.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index f0e719a..c87ac53 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -53,7 +53,7 @@ function M:init(opts) } self:mount() self:on_key(ViewConfig.keys.close, self.close) - self:on({ "BufDelete", "BufLeave", "BufHidden" }, self.close, { once = true }) + self:on({ "BufDelete", "BufHidden" }, self.close, { once = true }) return self end From 43496fa82cd4d68523754c3492660a9883e747d9 Mon Sep 17 00:00:00 2001 From: Lucas Tavares Date: Mon, 20 Feb 2023 04:31:03 -0300 Subject: [PATCH 010/815] fix(ui): disable colorcolumn on floating window (#575) --- lua/lazy/view/float.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index c87ac53..974fb8e 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -111,6 +111,7 @@ function M:mount() vim.wo[self.win].spell = false vim.wo[self.win].wrap = true vim.wo[self.win].winhighlight = "Normal:LazyNormal" + vim.wo[self.win].colorcolumn = "" end opts() From 8d5553d11b22754f7b2e091c8579eff3b477c7bc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 20 Feb 2023 07:31:46 +0000 Subject: [PATCH 011/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 488 +++++++++++++++++++++++++++------------------- 1 file changed, 285 insertions(+), 203 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 5753584..ffe7a2a 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,36 +1,32 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 17 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 20 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* 1. lazy.nvim |lazy.nvim-lazy.nvim| - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Installation |lazy.nvim-installation| - - Plugin Spec |lazy.nvim-plugin-spec| - - Configuration |lazy.nvim-configuration| - - Usage |lazy.nvim-usage| - - Lockfile `lazy-lock.json` |lazy.nvim-lockfile-`lazy-lock.json`| - - Performance |lazy.nvim-performance| - - Debug |lazy.nvim-debug| - - Startup Sequence |lazy.nvim-startup-sequence| - - Structuring Your Plugins |lazy.nvim-structuring-your-plugins| - - Migration Guide |lazy.nvim-migration-guide| - - Uninstalling |lazy.nvim-uninstalling| - - Highlight Groups |lazy.nvim-highlight-groups| - - Other Neovim Plugin Managers in Lua|lazy.nvim-other-neovim-plugin-managers-in-lua| + - Features |lazy.nvim-lazy.nvim-features| + - Requirements |lazy.nvim-lazy.nvim-requirements| + - Installation |lazy.nvim-lazy.nvim-installation| + - Plugin Spec |lazy.nvim-lazy.nvim-plugin-spec| + - Configuration |lazy.nvim-lazy.nvim-configuration| + - Usage |lazy.nvim-lazy.nvim-usage| + - Lockfile lazy-lock.json |lazy.nvim-lazy.nvim-lockfile-lazy-lock.json| + - Performance |lazy.nvim-lazy.nvim-performance| + - Debug |lazy.nvim-lazy.nvim-debug| + - Startup Sequence |lazy.nvim-lazy.nvim-startup-sequence| + - Structuring Your Plugins |lazy.nvim-lazy.nvim-structuring-your-plugins| + - Migration Guide |lazy.nvim-lazy.nvim-migration-guide| + - Uninstalling |lazy.nvim-lazy.nvim-uninstalling| + - Highlight Groups |lazy.nvim-lazy.nvim-highlight-groups| + - Other Neovim Plugin Managers in Lua|lazy.nvim-lazy.nvim-other-neovim-plugin-managers-in-lua| ============================================================================== 1. lazy.nvim *lazy.nvim-lazy.nvim* **lazy.nvim** is a modern plugin manager for Neovim. -
- -

image

-
-FEATURES *lazy.nvim-features* +FEATURES *lazy.nvim-lazy.nvim-features* - Manage all your Neovim plugins with a powerful UI @@ -52,15 +48,15 @@ FEATURES *lazy.nvim-features* - Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +REQUIREMENTS *lazy.nvim-lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) -- a Nerd Font **_(optional)_** +- a Nerd Font **(optional)** -INSTALLATION *lazy.nvim-installation* +INSTALLATION *lazy.nvim-lazy.nvim-installation* You can add the following Lua code to your `init.lua` to bootstrap **lazy.nvim** @@ -80,7 +76,6 @@ You can add the following Lua code to your `init.lua` to bootstrap vim.opt.rtp:prepend(lazypath) < - Next step is to add **lazy.nvim** below the code added in the last step in `init.lua` @@ -89,12 +84,10 @@ Next step is to add **lazy.nvim** below the code added in the last step in < - -- **plugins**: this should be a `table` or a `string` - - `table`: a list with your |lazy.nvim-plugin-spec| - - `string`: a Lua module name that contains your |lazy.nvim-plugin-spec|. See |lazy.nvim-structuring-your-plugins| -- **opts**: see |lazy.nvim-configuration| **_(optional)_** - +- **plugins**this should be a `table` or a `string` + - `table`a list with your |lazy.nvim-plugin-spec| + - `string`a Lua module name that contains your |lazy.nvim-plugin-spec|. See |lazy.nvim-structuring-your-plugins| +- **opts**see |lazy.nvim-configuration| **(optional)** >lua -- example using a list of specs with the default options @@ -107,38 +100,102 @@ Next step is to add **lazy.nvim** below the code added in the last step in }) < - It is recommended to run `:checkhealth lazy` after installation -PLUGIN SPEC *lazy.nvim-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 │ -│**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 │ -│**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 included in the spec │ -│**cond** │boolean? or fun():boolean │When false, or if the function returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. │ -│**dependencies**│LazySpec[] │A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. │ -│**init** │fun(LazyPlugin) │init functions are always executed during startup │ -│**opts** │table or fun(LazyPlugin, opts:table) │opts should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the Plugin.config() function. Setting this value will imply Plugin.config() │ -│**config** │fun(LazyPlugin, opts:table) or true │config is executed when the plugin loads. The default implementation will automatically run require("plugin").setup(opts). "plugin" will default to name if specified, otherwise lazy.nvim will do its best to guess the correct plugin name. See also opts. To use the default implementation without opts set config to true. │ -│**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 │ -│**version** │string? │Version to use from the repository. Full Semver ranges are supported │ -│**pin** │boolean? │When true, this plugin will not be included in updates │ -│submodules │boolean? │When false, git submodules will not be fetched. Defaults to true │ -│**event** │string? or string[] or fun(self:LazyPlugin, event:string[]):string[] │Lazy-load on event. Events can be specified as BufEnter or with a pattern like BufEnter .lua │ -│**cmd** │string? or string[] or fun(self:LazyPlugin, cmd:string[]):string[] │Lazy-load on command │ -│**ft** │string? or string[] or fun(self:LazyPlugin, ft:string[]):string[] │Lazy-load on filetype │ -│**keys** │string? or string[] or LazyKeys[] or fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[] │Lazy-load on key mapping │ -│**module** │false? │Do not automatically load this Lua module when it’s required somewhere │ -│**priority** │number? │Only useful for **start** plugins (lazy=false) to force loading certain plugins first. Default priority is 50. It’s recommended to set this to a high number for colorschemes. │ +PLUGIN SPEC *lazy.nvim-lazy.nvim-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 + + 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 + + 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 included in the spec + + cond boolean? or fun():boolean When false, or if the function returns false, then + this plugin will not be loaded. Useful to disable + some plugins in vscode, or firenvim for example. + + dependencies LazySpec[] A list of plugin names or plugin specs that should + be loaded when the plugin loads. Dependencies are + always lazy-loaded unless specified otherwise. When + specifying a name, make sure the plugin spec has + been defined somewhere else. + + init fun(LazyPlugin) init functions are always executed during startup + + opts table or fun(LazyPlugin, opts:table) opts should be a table (will be merged with parent + specs), return a table (replaces parent specs) or + should change a table. The table will be passed to + the Plugin.config() function. Setting this value + will imply Plugin.config() + + config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The + default implementation will automatically run + require("plugin").setup(opts). "plugin" will default + to name if specified, otherwise lazy.nvim will do + its best to guess the correct plugin name. See also + opts. To use the default implementation without opts + set config to true. + + 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 + + version string? Version to use from the repository. Full Semver + ranges are supported + + pin boolean? When true, this plugin will not be included in + updates + + submodules boolean? When false, git submodules will not be fetched. + Defaults to true + + event string? or string[] or Lazy-load on event. Events can be specified as + fun(self:LazyPlugin, event:string[]):string[] BufEnter or with a pattern like BufEnter .lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeys[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[] + + module false? Do not automatically load this Lua module when it’s + required somewhere + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is + 50. It’s recommended to set this to a high number + for colorschemes. + -------------------------------------------------------------------------------------------------------------------------------- LAZY LOADING ~ @@ -157,45 +214,36 @@ You can configure **lazy.nvim** to lazy-load all plugins by default with Additionally, you can also lazy-load on **events**, **commands**, **file types** and **key mappings**. -Plugins will be lazy-loaded when one of the following is `true`: +Plugins will be lazy-loaded when one of the following is `true` -- the plugin only exists as a dependency in your spec +- theplugin only exists as a dependency in your spec - it has an `event`, `cmd`, `ft` or `keys` key - `config.defaults.lazy == true` - *lazy.nvim-Colorschemes* - -Colorschemes Colorscheme plugins can be configured - with `lazy=true`. The plugin will - automagically load when doing - `colorscheme foobar`. +COLORSCHEMES +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. **NOTE:** since **start** plugins can possibly change existing highlight groups, it’s important to make sure that your main **colorscheme** is loaded - first. To ensure this you can use the `priority=1000` field. **_(see the - examples)_** + first. To ensure this you can use the `priority=1000` field. **(see the + examples)** + +LAZY KEY MAPPINGS + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeys` table with the following key-value pairs: - *lazy.nvim-Lazy-Key-Mappings* - -Lazy Key Mappings The `keys` property can be a `string` or - `string[]` for simple normal-mode - mappings, or it can be a `LazyKeys` - table with the following key-value - pairs: - - - -- **[1]**: (`string`) lhs **_(required)_** -- **[2]**: (`string|fun()`) rhs **_(optional)_** -- **mode**: (`string|string[]`) mode **_(optional, defaults to `"n"`)_** +- **[1]**(`string`) lhs **(required)** +- **[2]**(`string|fun()`) rhs **(optional)** +- **mode**(`string|string[]`) mode **(optional, defaults to "n")** - any other option valid for `vim.keymap.set` - Key mappings will load the plugin the first time they get executed. When `[2]` is `nil`, then the real mapping has to be created by the `config()` @@ -222,22 +270,22 @@ If you want to install a specific revision of a plugin, you can use `commit`, The `version` property supports Semver ranges. -Click to see some examples +Click to see some examples ~ -- :latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - +- latest stable version (this excludes pre-release versions) +- `1.2.x`any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc You can set `config.defaults.version = ""` to install the latest stable version of plugins that support Semver. + EXAMPLES ~ >lua @@ -338,7 +386,7 @@ EXAMPLES ~ < -CONFIGURATION *lazy.nvim-configuration* +CONFIGURATION *lazy.nvim-lazy.nvim-configuration* **lazy.nvim** comes with the following defaults: @@ -486,8 +534,7 @@ CONFIGURATION *lazy.nvim-configuration* } < - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ >lua { @@ -511,7 +558,7 @@ If you don’t want to use a Nerd Font, you can replace the icons with Unicode s < -USAGE *lazy.nvim-usage* +USAGE *lazy.nvim-lazy.nvim-usage* Plugins are managed with the `:Lazy` command. Open the help with `` to see all the key mappings. @@ -526,24 +573,43 @@ enabled with `config.checker.enabled = true`. Any operation can be started from the UI, with a sub command or an API function: -│ Command │ Lua │ Description │ -│:Lazy build {plugins} │require("lazy").build(opts) │Rebuild a plugin │ -│:Lazy check [plugins] │require("lazy").check(opts?) │Check for updates and show the log (git fetch) │ -│:Lazy clean [plugins] │require("lazy").clean(opts?) │Clean plugins that are no longer needed │ -│:Lazy clear │require("lazy").clear() │Clear finished tasks │ -│:Lazy debug │require("lazy").debug() │Show debug information │ -│:Lazy health │require("lazy").health() │Run :checkhealth lazy │ -│:Lazy help │require("lazy").help() │Toggle this help page │ -│:Lazy home │require("lazy").home() │Go back to plugin list │ -│:Lazy install [plugins] │require("lazy").install(opts?) │Install missing plugins │ -│:Lazy load {plugins} │require("lazy").load(opts) │Load a plugin that has not been loaded yet. Similar to :packadd. Like :Lazy load foo.nvim. Use :Lazy! load to skip cond checks. │ -│:Lazy log [plugins] │require("lazy").log(opts?) │Show recent updates │ -│:Lazy profile │require("lazy").profile() │Show detailed profiling │ -│:Lazy restore [plugins] │require("lazy").restore(opts?) │Updates all plugins to the state in the lockfile. For a single plugin: restore it to the state in the lockfile or to a given commit under the cursor│ -│:Lazy sync [plugins] │require("lazy").sync(opts?) │Run install, clean and update │ -│:Lazy update [plugins] │require("lazy").update(opts?) │Update plugins. This will also update the lockfile │ + -------------------------------------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- --------------------------------------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and show the log (git fetch) + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has not been loaded yet. Similar + to :packadd. Like :Lazy load foo.nvim. Use + :Lazy! load to skip cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to the state in the lockfile. + For a single plugin: restore it to the state in the + lockfile or to a given commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This will also update the lockfile + -------------------------------------------------------------------------------------------------------------- Any command can have a **bang** to make the command wait till it finished. For example, if you want to sync lazy from the cmdline, you can use: @@ -551,15 +617,13 @@ example, if you want to sync lazy from the cmdline, you can use: $ nvim --headless "+Lazy! sync" +qa < - `opts` is a table with the following key-values: -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - +- **wait**when true, then the call will wait till the operation completed +- **show**when false, the UI will not be shown +- **plugins**a list of plugin names to run the operation on +- **concurrency**limit the `number` of concurrently running tasks Stats API (`require("lazy").stats()`): @@ -578,12 +642,11 @@ Stats API (`require("lazy").stats()`): } < - **lazy.nvim** provides a statusline component that you can use to show the number of pending updates. Make sure to enable `config.checker.enabled = true` to make this work. -Example of configuring lualine.nvim +Example of configuring lualine.nvim ~ >lua require("lualine").setup({ @@ -605,20 +668,20 @@ USER EVENTS ~ The following user events will be triggered: -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. +- **LazyDone**when lazy has finished starting up and loaded your config +- **LazySync**after running sync +- **LazyInstall**after an install +- **LazyUpdate**after an update +- **LazyClean**after a clean +- **LazyCheck**after checking for updates +- **LazyLog**after running log +- **LazyReload**triggered by change detection after reloading plugin specs +- **VeryLazy**triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. Useful to update the startuptime on your dashboard. -LOCKFILE `LAZY-LOCK.JSON` *lazy.nvim-lockfile-`lazy-lock.json`* +LOCKFILE LAZY-LOCK.JSON *lazy.nvim-lazy.nvim-lockfile-lazy-lock.json* After every **update**, the local lockfile is updated with the installed revisions. It is recommended to have this file under version control. @@ -629,7 +692,8 @@ ensure that the same version of every plugin is installed. If you are on another machine, you can do `:Lazy restore`, to update all your plugins to the version from the lockfile. -PERFORMANCE *lazy.nvim-performance* + +PERFORMANCE *lazy.nvim-lazy.nvim-performance* Great care has been taken to make the startup code (`lazy.core`) as efficient as possible. During startup, all Lua files used before `VimEnter` or @@ -643,22 +707,14 @@ lazy-loading though :) improve performance. The profiling view shows you why and how long it took to load your plugins. -
- -

image

-
-DEBUG *lazy.nvim-debug* +DEBUG *lazy.nvim-lazy.nvim-debug* See an overview of active lazy-loading handlers and what’s in the module cache -
- -

image

-
-STARTUP SEQUENCE *lazy.nvim-startup-sequence* +STARTUP SEQUENCE *lazy.nvim-lazy.nvim-startup-sequence* **lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading completely (`vim.go.loadplugins = false`). It takes over the complete startup @@ -667,15 +723,12 @@ sequence for more flexibility and better performance. In practice this means that step 10 of |Neovim Initialization| is done by Lazy: -1. all the plugins’ `init()` functions are executed -2. all plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. all files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`) -4. all `/after/plugin` files are sourced (this includes `/after` from plugins) - +1. all the plugins’ `init()` functions are executed2. all plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet)3. all files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`)4. all `/after/plugin` files are sourced (this includes `/after` from plugins) Files from runtime directories are always sourced in alphabetical order. -STRUCTURING YOUR PLUGINS *lazy.nvim-structuring-your-plugins* + +STRUCTURING YOUR PLUGINS *lazy.nvim-lazy.nvim-structuring-your-plugins* Some users may want to split their plugin specs in multiple files. Instead of passing a spec table to `setup()`, you can use a Lua module. The specs from the @@ -690,21 +743,17 @@ The benefits of using this approach: - allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. - spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date - Example: - `~/.config/nvim/init.lua` - >lua require("lazy").setup("plugins") < - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **_(this file is optional)_** - +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** >lua return { @@ -715,10 +764,8 @@ Example: < - - any lua file in `~/.config/nvim/lua/plugins/.lua` will be automatically merged in the main plugin spec - For a real-life example, you can check LazyVim and more specifically: @@ -726,7 +773,7 @@ For a real-life example, you can check LazyVim - lazyvim.plugins contains all the plugin specs that will be loaded -IMPORTING SPECS, `CONFIG` & `OPTS` ~ +IMPORTING SPECS, CONFIG & OPTS ~ As part of a spec, you can add `import` statements to import additional plugin modules. Both of the `setup()` calls are equivalent: @@ -738,7 +785,6 @@ modules. Both of the `setup()` calls are equivalent: require("lazy").setup({{import = "plugins"}}) < - When you import specs, you can override them by simply adding a spec for the same plugin to your local specs, adding any keys you want to override / merge. @@ -746,9 +792,11 @@ same plugin to your local specs, adding any keys you want to override / merge. the parent spec. Any other property will override the property from the parent spec. -MIGRATION GUIDE *lazy.nvim-migration-guide* -PACKER.NVIM ~ +MIGRATION GUIDE *lazy.nvim-lazy.nvim-migration-guide* + + +PACKER.NVIM ~ - `setup` `init` @@ -759,21 +807,19 @@ PACKER.NVIM ~ - `lock` `pin` - `disable=true` `enabled = false` - `tag=''` `version=""` -- `after` **_not needed_** for most use-cases. Use `dependencies` otherwise. -- `wants` **_not needed_** for most use-cases. Use `dependencies` otherwise. +- `after` **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` **not needed** for most use-cases. Use `dependencies` otherwise. - `config` don’t support string type, use `fun(LazyPlugin)` instead. - `module` is auto-loaded. No need to specify - `keys` spec is |lazy.nvim-different| - `rtp` can be accomplished with: - >lua config = function(plugin) vim.opt.rtp:append(plugin.dir .. "/custom-rtp") end < - With packer `wants`, `requires` and `after` can be used to manage dependencies. With lazy, this isn’t needed for most of the lua dependencies. They can be installed just like normal plugins (even with `lazy=true`) and will be loaded @@ -782,7 +828,8 @@ required plugins with the one that requires them. The plugins which are added as `dependencies` will always be lazy-loaded and loaded when the plugin is loaded. -PAQ-NVIM ~ + +PAQ-NVIM ~ - `as` `name` @@ -790,58 +837,87 @@ PAQ-NVIM ~ - `run` `build` -UNINSTALLING *lazy.nvim-uninstalling* +UNINSTALLING *lazy.nvim-lazy.nvim-uninstalling* To uninstall **lazy.nvim**, you need to remove the following files and directories: -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - +- **data**`~/.local/share/nvim/lazy` +- **state**`~/.local/state/nvim/lazy` +- **lockfile**`~/.config/nvim/lazy-lock.json` paths can differ if you changed `XDG` environment variables. +HIGHLIGHT GROUPS *lazy.nvim-lazy.nvim-highlight-groups* -HIGHLIGHT GROUPS *lazy.nvim-highlight-groups* +Click to see all highlight groups ~ -Click to see all highlight groups + --------------------------------------------------------------------------------- + Highlight Group Default Group Description + ------------------- ------------------------ ------------------------------------ + LazyButton CursorLine -│ Highlight Group │ Default Group │ Description │ -│**LazyButton** │**_CursorLine_** │ │ -│**LazyButtonActive** │**_Visual_** │ │ -│**LazyComment** │**_Comment_** │ │ -│**LazyCommit** │_variable.builtin │commitref │ -│**LazyCommitIssue** │**_Number_** │ │ -│**LazyCommitScope** │**_Italic_** │conventional commit scope │ -│**LazyCommitType** │**_Title_** │conventional commit type │ -│**LazyDir** │_text.reference │directory │ -│**LazyH1** │**_IncSearch_** │homebutton │ -│**LazyH2** │**_Bold_** │titles │ -│**LazyNoCond** │**_DiagnosticWarn_**│unloaded icon for a plugin where cond() was false │ -│**LazyNormal** │**_NormalFloat_** │ │ -│**LazyProgressDone** │**_Constant_** │progress bar done │ -│**LazyProgressTodo** │**_LineNr_** │progress bar todo │ -│**LazyProp** │**_Conceal_** │property │ -│**LazyReasonCmd** │**_Operator_** │ │ -│**LazyReasonEvent** │**_Constant_** │ │ -│**LazyReasonFt** │**_Character_** │ │ -│**LazyReasonImport** │**_Identifier_** │ │ -│**LazyReasonKeys** │**_Statement_** │ │ -│**LazyReasonPlugin** │**_Special_** │ │ -│**LazyReasonRuntime**│_macro │ │ -│**LazyReasonSource** │**_Character_** │ │ -│**LazyReasonStart** │_field │ │ -│**LazySpecial** │_punctuation.special│ │ -│**LazyTaskError** │**_ErrorMsg_** │taskerrors │ -│**LazyTaskOutput** │**_MsgArea_** │task output │ -│**LazyUrl** │_text.reference │url │ -│**LazyValue** │_string │valueof a property │ + LazyButtonActive Visual + LazyComment Comment -OTHER NEOVIM PLUGIN MANAGERS IN LUA*lazy.nvim-other-neovim-plugin-managers-in-lua* + LazyCommit _@variable.builtin_ commitref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit scope + + LazyCommitType Title conventional commit type + + LazyDir _@text.reference_ directory + + LazyH1 IncSearch homebutton + + LazyH2 Bold titles + + LazyNoCond DiagnosticWarn unloaded icon for a plugin where + cond() was false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRuntime _@macro_ + + LazyReasonSource Character + + LazyReasonStart _@field_ + + LazySpecial _@punctuation.special_ + + LazyTaskError ErrorMsg taskerrors + + LazyTaskOutput MsgArea task output + + LazyUrl _@text.reference_ url + + LazyValue _@string_ valueof a property + --------------------------------------------------------------------------------- + +OTHER NEOVIM PLUGIN MANAGERS IN LUA*lazy.nvim-lazy.nvim-other-neovim-plugin-managers-in-lua* - packer.nvim @@ -851,6 +927,12 @@ OTHER NEOVIM PLUGIN MANAGERS IN LUA*lazy.nvim-other-neovim-plugin-managers-in-lu - optpack.nvim - pact.nvim +============================================================================== +2. Links *lazy.nvim-links* + +1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 8077428e63feb0f3bf795d53b23ba1695b28ab0e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 20 Feb 2023 09:06:09 +0100 Subject: [PATCH 012/815] chore(main): release 9.8.5 (#563) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ed8af5..c4ad0b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [9.8.5](https://github.com/folke/lazy.nvim/compare/v9.8.4...v9.8.5) (2023-02-20) + + +### Bug Fixes + +* **ui:** disable colorcolumn on floating window ([#575](https://github.com/folke/lazy.nvim/issues/575)) ([43496fa](https://github.com/folke/lazy.nvim/commit/43496fa82cd4d68523754c3492660a9883e747d9)) +* **ui:** don't close on BufLeave. Fixes [#561](https://github.com/folke/lazy.nvim/issues/561) ([7339145](https://github.com/folke/lazy.nvim/commit/7339145a223dab7e7ddccf0986ffbf9d2cb804e8)) + ## [9.8.4](https://github.com/folke/lazy.nvim/compare/v9.8.3...v9.8.4) (2023-02-17) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 310e11c..bb974f7 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -147,7 +147,7 @@ M.defaults = { debug = false, } -M.version = "9.8.4" -- x-release-please-version +M.version = "9.8.5" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 1657ae9b8c86d672517ac7f573eb180d3f5ecb79 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 27 Feb 2023 09:59:47 +0100 Subject: [PATCH 013/815] fix(keys): set nowait for lazy keymaps when needed. Fixes #600 --- lua/lazy/core/handler/keys.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index b1fbc6d..91ece7a 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -79,6 +79,7 @@ function M:_add(keys) vim.api.nvim_feedkeys(feed, "i", false) end, { desc = opts.desc, + nowait = opts.nowait, -- we do not return anything, but this is still needed to make operator pending mappings work expr = true, }) From 8cbd95bd059f791e7e9c8cbbf03c368a8bcad9f0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 27 Feb 2023 09:00:46 +0000 Subject: [PATCH 014/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index ffe7a2a..b977a14 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 20 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 27 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 5694483e8782f4d9a01ea8822166998924df5f00 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 27 Feb 2023 13:42:52 +0100 Subject: [PATCH 015/815] fix(health): whitelist deactivate prop --- lua/lazy/health.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 75a85a6..39df32d 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -94,6 +94,7 @@ M.valid = { "commit", "cond", "config", + "deactivate", "dependencies", "dev", "dir", From b814d870897a12b636580e397a78acf242a85e93 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 27 Feb 2023 20:25:03 +0100 Subject: [PATCH 016/815] style(cache): removed hack for relative paths --- lua/lazy/core/cache.lua | 7 ------- 1 file changed, 7 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 8a02711..6f7c4f5 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -231,13 +231,6 @@ function Cache.find(modname, opts) local basename = modname:gsub("%.", "/") local idx = modname:find(".", 1, true) - -- HACK: some plugins try to load invalid relative paths (see #543) - if idx == 1 then - modname = modname:gsub("^%.+", "") - basename = modname:gsub("%.", "/") - idx = modname:find(".", 1, true) - end - local topmod = idx and modname:sub(1, idx - 1) or modname -- OPTIM: search for a directory first when topmod == modname From 9bd1c946d6114affebb57dbe3e33741ded566559 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 27 Feb 2023 20:38:05 +0100 Subject: [PATCH 017/815] feat(health): check for paths on the rtp from plugged or packer --- lua/lazy/health.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 39df32d..c982a37 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -30,6 +30,15 @@ function M.check() vim.health.report_ok("no existing packages found by other package managers") end + for _, name in ipairs({ "packer", "plugged", "paq" }) do + for _, path in ipairs(vim.opt.rtp:get()) do + if path:find(name, 1, true) then + vim.health.report_error("Found paths on the rtp from another plugin manager `" .. name .. "`") + break + end + end + end + local packer_compiled = vim.fn.stdpath("config") .. "/plugin/packer_compiled.lua" if vim.loop.fs_stat(packer_compiled) then vim.health.report_error("please remove the file `" .. packer_compiled .. "`") From c7a8e702f7342a592c8e88e516c206e3226400b4 Mon Sep 17 00:00:00 2001 From: adrian5 Date: Tue, 28 Feb 2023 07:27:19 +0100 Subject: [PATCH 018/815] docs: update some wording and capitalization (#576) --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 37fa84f..e0ecbd4 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ ## ✨ Features - 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of lua modules +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules - 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of lua modules and lazy-loading on events, commands, filetypes, and key mappings +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings - ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away - 💪 Async execution for improved performance - 🛠️ No need to manually compile plugins @@ -32,7 +32,7 @@ ## 📦 Installation -You can add the following Lua code to your `init.lua` to bootstrap **lazy.nvim** +You can add the following Lua code to your `init.lua` to bootstrap **lazy.nvim**: @@ -53,7 +53,7 @@ vim.opt.rtp:prepend(lazypath) -Next step is to add **lazy.nvim** below the code added in the last step in `init.lua` +Next step is to add **lazy.nvim** below the code added in the prior step in `init.lua`: ```lua require("lazy").setup(plugins, opts) @@ -65,8 +65,8 @@ require("lazy").setup(plugins, opts) - **opts**: see [Configuration](#%EF%B8%8F-configuration) **_(optional)_** ```lua --- example using a list of specs with the default options -vim.g.mapleader = " " -- make sure to set `mapleader` before lazy so your mappings are correct +-- Example using a list of specs with the default options +vim.g.mapleader = " " -- Make sure to set `mapleader` before lazy so your mappings are correct require("lazy").setup({ "folke/which-key.nvim", @@ -75,7 +75,7 @@ require("lazy").setup({ }) ``` -ℹ️ It is recommended to run `:checkhealth lazy` after installation +ℹ️ It is recommended to run `:checkhealth lazy` after installation. ## 🔌 Plugin Spec @@ -110,7 +110,7 @@ require("lazy").setup({ ### Lazy Loading **lazy.nvim** automagically lazy-loads Lua modules, so it is not needed to -specify `module=...` everywhere in your plugin specification. This mean that if +specify `module=...` everywhere in your plugin specification. This means that if you have a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of plugin `A`, then plugin `A` will be loaded on demand as expected. @@ -124,8 +124,8 @@ Additionally, you can also lazy-load on **events**, **commands**, Plugins will be lazy-loaded when one of the following is `true`: -- the plugin only exists as a dependency in your spec -- it has an `event`, `cmd`, `ft` or `keys` key +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key - `config.defaults.lazy == true` #### 🌈 Colorschemes @@ -605,7 +605,7 @@ The profiling view shows you why and how long it took to load your plugins. ## 🐛 Debug -See an overview of active lazy-loading handlers and what's in the module cache +See an overview of active lazy-loading handlers and what's in the module cache. ![image](https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png) @@ -617,10 +617,10 @@ startup sequence for more flexibility and better performance. In practice this means that step 10 of [Neovim Initialization](https://neovim.io/doc/user/starting.html#initialization) is done by Lazy: -1. all the plugins' `init()` functions are executed -2. all plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. all files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`) -4. all `/after/plugin` files are sourced (this includes `/after` from plugins) +1. All the plugins' `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) Files from runtime directories are always sourced in alphabetical order. @@ -633,9 +633,9 @@ so it is not needed to add `require` calls in your main plugin file to the other The benefits of using this approach: -- simple to **add** new plugin specs. Just create a new file in your plugins module. -- allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- spec changes will automatically be **reloaded** when they're updated, so the `:Lazy` UI is always up to date +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they're updated, so the `:Lazy` UI is always up to date. Example: @@ -655,7 +655,7 @@ return { } ``` -- any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec For a real-life example, you can check [LazyVim](https://github.com/LazyVim/LazyVim) and more specifically: @@ -669,7 +669,7 @@ Both of the `setup()` calls are equivalent: ```lua require("lazy").setup("plugins") --- same as: +-- Same as: require("lazy").setup({{import = "plugins"}}) ``` @@ -705,7 +705,7 @@ end ``` With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn't needed for most of the lua dependencies. They can be installed just like normal plugins +With lazy, this isn't needed for most of the Lua dependencies. They can be installed just like normal plugins (even with `lazy=true`) and will be loaded when other plugins need them. The `dependencies` key can be used to group those required plugins with the one that requires them. The plugins which are added as `dependencies` will always be lazy-loaded and loaded when the plugin is loaded. @@ -724,7 +724,7 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori - **state**: `~/.local/state/nvim/lazy` - **lockfile**: `~/.config/nvim/lazy-lock.json` -> paths can differ if you changed `XDG` environment variables. +> Paths can differ if you changed `XDG` environment variables. ## 🌈 Highlight Groups From 25132fc08f6c0c68068be19680f8b6d9d6149985 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 28 Feb 2023 06:28:08 +0000 Subject: [PATCH 019/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b977a14..ecd4f9b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 27 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 28 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -30,9 +30,9 @@ FEATURES *lazy.nvim-lazy.nvim-features* - Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of lua modules +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules - Partial clones instead of shallow clones -- Automatic lazy-loading of lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings - Automatically install missing plugins before starting up Neovim, allowing you to start using it right away - Async execution for improved performance - No need to manually compile plugins @@ -76,7 +76,7 @@ You can add the following Lua code to your `init.lua` to bootstrap vim.opt.rtp:prepend(lazypath) < -Next step is to add **lazy.nvim** below the code added in the last step in +Nextstep is to add **lazy.nvim** below the code added in the prior step in `init.lua` >lua @@ -90,8 +90,8 @@ Next step is to add **lazy.nvim** below the code added in the last step in - **opts**see |lazy.nvim-configuration| **(optional)** >lua - -- example using a list of specs with the default options - vim.g.mapleader = " " -- make sure to set `mapleader` before lazy so your mappings are correct + -- Example using a list of specs with the default options + vim.g.mapleader = " " -- Make sure to set `mapleader` before lazy so your mappings are correct require("lazy").setup({ "folke/which-key.nvim", @@ -100,7 +100,7 @@ Next step is to add **lazy.nvim** below the code added in the last step in }) < -It is recommended to run `:checkhealth lazy` after installation +It is recommended to run `:checkhealth lazy` after installation. PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* @@ -200,8 +200,8 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* LAZY LOADING ~ **lazy.nvim** automagically lazy-loads Lua modules, so it is not needed to -specify `module=...` everywhere in your plugin specification. This mean that if -you have a plugin `A` that is lazy-loaded and a plugin `B` that requires a +specify `module=...` everywhere in your plugin specification. This means that +if you have a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of plugin `A`, then plugin `A` will be loaded on demand as expected. If you don’t want this behavior for a certain plugin, you can specify that @@ -217,8 +217,8 @@ types** and **key mappings**. Plugins will be lazy-loaded when one of the following is `true` -- theplugin only exists as a dependency in your spec -- it has an `event`, `cmd`, `ft` or `keys` key +- Theplugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key - `config.defaults.lazy == true` @@ -711,7 +711,7 @@ load your plugins. DEBUG *lazy.nvim-lazy.nvim-debug* See an overview of active lazy-loading handlers and what’s in the module -cache +cache. STARTUP SEQUENCE *lazy.nvim-lazy.nvim-startup-sequence* @@ -723,7 +723,7 @@ sequence for more flexibility and better performance. In practice this means that step 10 of |Neovim Initialization| is done by Lazy: -1. all the plugins’ `init()` functions are executed2. all plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet)3. all files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`)4. all `/after/plugin` files are sourced (this includes `/after` from plugins) +1. All the plugins’ `init()` functions are executed2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet)3. All files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`)4. All `/after/plugin` files are sourced (this includes `/after` from plugins) Files from runtime directories are always sourced in alphabetical order. @@ -739,9 +739,9 @@ to the other files. The benefits of using this approach: -- simple to **add** new plugin specs. Just create a new file in your plugins module. -- allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. Example: @@ -764,7 +764,7 @@ Example: < -- any lua file in `~/.config/nvim/lua/plugins/.lua` will be automatically merged in the main plugin spec +- Any lua file in `~/.config/nvim/lua/plugins/.lua` will be automatically merged in the main plugin spec For a real-life example, you can check LazyVim and more specifically: @@ -781,7 +781,7 @@ modules. Both of the `setup()` calls are equivalent: >lua require("lazy").setup("plugins") - -- same as: + -- Same as: require("lazy").setup({{import = "plugins"}}) < @@ -821,7 +821,7 @@ PACKER.NVIM ~ < With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the lua dependencies. They can be +With lazy, this isn’t needed for most of the Lua dependencies. They can be installed just like normal plugins (even with `lazy=true`) and will be loaded when other plugins need them. The `dependencies` key can be used to group those required plugins with the one that requires them. The plugins which are added @@ -848,7 +848,7 @@ directories: - **lockfile**`~/.config/nvim/lazy-lock.json` - paths can differ if you changed `XDG` environment variables. + Paths can differ if you changed `XDG` environment variables. HIGHLIGHT GROUPS *lazy.nvim-lazy.nvim-highlight-groups* From 0f713b2958b8a2e624fa0e2615418bd6c8fb8e10 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 28 Feb 2023 09:55:16 +0100 Subject: [PATCH 020/815] fix(ui): always show diagnostics virtual text --- lua/lazy/view/render.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 6cf424c..b84fb0f 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -84,7 +84,7 @@ function M:update() diag.lnum = diag.row - 1 return diag end, self._diagnostics), - { signs = false } + { signs = false, virtual_text = true } ) end From 5af93806aaa33fd9e8b4a7a32e9f847a3ad64c2a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 28 Feb 2023 10:51:17 +0100 Subject: [PATCH 021/815] fix(git): honor clone.defaultRemoteName. Fixes #602 --- lua/lazy/manage/git.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/lazy/manage/git.lua b/lua/lazy/manage/git.lua index 116c5fe..2f37456 100644 --- a/lua/lazy/manage/git.lua +++ b/lua/lazy/manage/git.lua @@ -196,7 +196,9 @@ end ---@param repo string function M.get_origin(repo) - return M.get_config(repo)["remote.origin.url"] + local config = M.get_config(repo) + local remote = config["clone.defaultRemoteName"] or "origin" + return config["remote." .. remote .. ".url"] or config["remote.origin.url"] end ---@param repo string From 77223786aaa91446649d0dbdc3eabc2e53f9de6d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 28 Feb 2023 11:51:16 +0100 Subject: [PATCH 022/815] fix(git): properly deal with failed clones. Fixes #571 --- lua/lazy/core/config.lua | 2 ++ lua/lazy/core/plugin.lua | 10 ++++++++++ lua/lazy/manage/task/git.lua | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index bb974f7..94f1bf0 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -188,6 +188,8 @@ function M.setup(opts) M.options.lockfile = Util.norm(M.options.lockfile) M.options.readme.root = Util.norm(M.options.readme.root) + vim.fn.mkdir(M.options.root, "p") + if M.options.performance.reset_packpath then vim.go.packpath = vim.env.VIMRUNTIME end diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index edd8ff0..f562da4 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -308,14 +308,24 @@ function Spec:merge(old, new) end function M.update_state() + ---@type string[] + local cloning = {} + ---@type table local installed = {} Util.ls(Config.options.root, function(_, name, type) if type == "directory" and name ~= "readme" then installed[name] = type + elseif type == "file" and name:sub(-8) == ".cloning" then + name = name:sub(1, -9) + cloning[#cloning + 1] = name end end) + for _, failed in ipairs(cloning) do + installed[failed] = nil + end + for _, plugin in pairs(Config.plugins) do plugin._ = plugin._ or {} if plugin.lazy == nil then diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 3882362..cc1d3c4 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -1,6 +1,7 @@ local Git = require("lazy.manage.git") local Lock = require("lazy.manage.lock") local Config = require("lazy.core.config") +local Util = require("lazy.util") ---@type table local M = {} @@ -81,6 +82,14 @@ M.clone = { end table.insert(args, self.plugin.dir) + + if vim.fn.isdirectory(self.plugin.dir) == 1 then + require("lazy.manage.task.fs").clean.run(self, {}) + end + + local marker = self.plugin.dir .. ".cloning" + Util.write_file(marker, "") + self:spawn("git", { args = args, on_exit = function(ok) @@ -88,6 +97,7 @@ M.clone = { self.plugin._.cloned = true self.plugin._.installed = true self.plugin._.dirty = true + vim.loop.fs_unlink(marker) end end, }) From 79f85e5fed3ea020b09720e273c8b626f699b19a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 28 Feb 2023 12:38:10 +0100 Subject: [PATCH 023/815] fix(cache): add hack to work-around incorrect requires back. Not a fan of this. Fixes #603 --- lua/lazy/core/cache.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 6f7c4f5..c9313cd 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -231,6 +231,12 @@ function Cache.find(modname, opts) local basename = modname:gsub("%.", "/") local idx = modname:find(".", 1, true) + -- HACK: fix incorrect require statements. Really not a fan of keeping this + if idx == 1 then + modname = modname:gsub("^%.+", "") + basename = modname:gsub("%.", "/") + idx = modname:find(".", 1, true) + end local topmod = idx and modname:sub(1, idx - 1) or modname -- OPTIM: search for a directory first when topmod == modname From 26d121ea13bee96b079403cee6598f04969d4983 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 28 Feb 2023 12:59:22 +0100 Subject: [PATCH 024/815] chore(main): release 9.9.0 (#601) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 17 +++++++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4ad0b7..404489b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## [9.9.0](https://github.com/folke/lazy.nvim/compare/v9.8.5...v9.9.0) (2023-02-28) + + +### Features + +* **health:** check for paths on the rtp from plugged or packer ([9bd1c94](https://github.com/folke/lazy.nvim/commit/9bd1c946d6114affebb57dbe3e33741ded566559)) + + +### Bug Fixes + +* **cache:** add hack to work-around incorrect requires back. Not a fan of this. Fixes [#603](https://github.com/folke/lazy.nvim/issues/603) ([79f85e5](https://github.com/folke/lazy.nvim/commit/79f85e5fed3ea020b09720e273c8b626f699b19a)) +* **git:** honor clone.defaultRemoteName. Fixes [#602](https://github.com/folke/lazy.nvim/issues/602) ([5af9380](https://github.com/folke/lazy.nvim/commit/5af93806aaa33fd9e8b4a7a32e9f847a3ad64c2a)) +* **git:** properly deal with failed clones. Fixes [#571](https://github.com/folke/lazy.nvim/issues/571) ([7722378](https://github.com/folke/lazy.nvim/commit/77223786aaa91446649d0dbdc3eabc2e53f9de6d)) +* **health:** whitelist deactivate prop ([5694483](https://github.com/folke/lazy.nvim/commit/5694483e8782f4d9a01ea8822166998924df5f00)) +* **keys:** set nowait for lazy keymaps when needed. Fixes [#600](https://github.com/folke/lazy.nvim/issues/600) ([1657ae9](https://github.com/folke/lazy.nvim/commit/1657ae9b8c86d672517ac7f573eb180d3f5ecb79)) +* **ui:** always show diagnostics virtual text ([0f713b2](https://github.com/folke/lazy.nvim/commit/0f713b2958b8a2e624fa0e2615418bd6c8fb8e10)) + ## [9.8.5](https://github.com/folke/lazy.nvim/compare/v9.8.4...v9.8.5) (2023-02-20) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 94f1bf0..5015bf9 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -147,7 +147,7 @@ M.defaults = { debug = false, } -M.version = "9.8.5" -- x-release-please-version +M.version = "9.9.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 1f7ffec177656ac806706097d23f288e3a5e0b51 Mon Sep 17 00:00:00 2001 From: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Thu, 2 Mar 2023 14:25:50 +0100 Subject: [PATCH 025/815] feat(render): dim housekeeping commits by default (#612) * feat(render): dim housekeeping commits by default use `LazyComment` highlight group for commits with housekeeping types, i.e. chore/ci/doc * refactor: some small improvments to unimportant commits --------- Co-authored-by: Folke Lemaitre --- lua/lazy/view/colors.lua | 1 + lua/lazy/view/config.lua | 2 ++ lua/lazy/view/render.lua | 12 +++++++++--- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lua/lazy/view/colors.lua b/lua/lazy/view/colors.lua index 550ed09..333af82 100644 --- a/lua/lazy/view/colors.lua +++ b/lua/lazy/view/colors.lua @@ -9,6 +9,7 @@ M.colors = { CommitIssue = "Number", CommitType = "Title", -- conventional commit type CommitScope = "Italic", -- conventional commit scope + Dimmed = "Conceal", -- property Prop = "Conceal", -- property Value = "@string", -- value of a property NoCond = "DiagnosticWarn", -- unloaded icon for a plugin where `cond()` was false diff --git a/lua/lazy/view/config.lua b/lua/lazy/view/config.lua index 1f38540..6c73d40 100644 --- a/lua/lazy/view/config.lua +++ b/lua/lazy/view/config.lua @@ -24,6 +24,8 @@ function M.get_commands() return ret end +M.dimmed_commits = { "build", "ci", "chore", "doc" } + M.keys = { hover = "K", diff = "d", diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index b84fb0f..00f4072 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -456,15 +456,21 @@ function M:log(task) self:diagnostic({ message = "Breaking Changes", severity = vim.diagnostic.severity.WARN }) end self:append(ref:sub(1, 7) .. " ", "LazyCommit", { indent = 6 }) - self:append(vim.trim(msg)):highlight({ + + local dimmed = false + for _, dim in ipairs(ViewConfig.dimmed_commits) do + if msg:find("^" .. dim) then + dimmed = true + end + end + self:append(vim.trim(msg), dimmed and "LazyDimmed" or nil):highlight({ ["#%d+"] = "LazyCommitIssue", - ["^%S+:"] = "LazyCommitType", + ["^%S+:"] = dimmed and "Bold" or "LazyCommitType", ["^%S+(%(.*%)):"] = "LazyCommitScope", ["`.-`"] = "@text.literal.markdown_inline", ["%*.-%*"] = "Italic", ["%*%*.-%*%*"] = "Bold", }) - -- string.gsub self:append(" " .. time, "LazyComment") self:nl() end From 2691c8f7a5ed329a639a994b0e9570b798813192 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 2 Mar 2023 13:26:43 +0000 Subject: [PATCH 026/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index ecd4f9b..5769704 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 February 28 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 02 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 8d18ef44e769e98a8dc974ca85275de1d8cc7c04 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Mar 2023 14:29:16 +0100 Subject: [PATCH 027/815] chore(main): release 9.10.0 (#613) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 404489b..221f603 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.10.0](https://github.com/folke/lazy.nvim/compare/v9.9.0...v9.10.0) (2023-03-02) + + +### Features + +* **render:** dim housekeeping commits by default ([#612](https://github.com/folke/lazy.nvim/issues/612)) ([1f7ffec](https://github.com/folke/lazy.nvim/commit/1f7ffec177656ac806706097d23f288e3a5e0b51)) + ## [9.9.0](https://github.com/folke/lazy.nvim/compare/v9.8.5...v9.9.0) (2023-02-28) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 5015bf9..edf50a4 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -147,7 +147,7 @@ M.defaults = { debug = false, } -M.version = "9.9.0" -- x-release-please-version +M.version = "9.10.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From c60f7ea985c488192a38bb3ddf7705f958bd3674 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 4 Mar 2023 18:20:27 +0100 Subject: [PATCH 028/815] fix(process): unset GIT_WORK_TREE --- lua/lazy/manage/process.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index 530aeaa..04b31bb 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -62,6 +62,7 @@ function M.spawn(cmd, opts) GIT_SSH_COMMAND = "ssh -oBatchMode=yes", }, uv.os_environ(), opts.env or {}) env.GIT_DIR = nil + env.GIT_WORK_TREE = nil env.GIT_TERMINAL_PROMPT = "0" ---@type string[] From b5667ec94df71736084655cdf3288d76b19ec224 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 Mar 2023 17:21:19 +0000 Subject: [PATCH 029/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 5769704..7255c80 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 02 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 04 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 14075657131b9a19883a8845c47f1ab65461cd6f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 4 Mar 2023 18:28:10 +0100 Subject: [PATCH 030/815] chore(main): release 9.10.1 (#619) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 221f603..b9b0d68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.10.1](https://github.com/folke/lazy.nvim/compare/v9.10.0...v9.10.1) (2023-03-04) + + +### Bug Fixes + +* **process:** unset GIT_WORK_TREE ([c60f7ea](https://github.com/folke/lazy.nvim/commit/c60f7ea985c488192a38bb3ddf7705f958bd3674)) + ## [9.10.0](https://github.com/folke/lazy.nvim/compare/v9.9.0...v9.10.0) (2023-03-02) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index edf50a4..f762df2 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -147,7 +147,7 @@ M.defaults = { debug = false, } -M.version = "9.10.0" -- x-release-please-version +M.version = "9.10.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 53be2c0ee1848fee2a47b89d184ad02410d3c319 Mon Sep 17 00:00:00 2001 From: Sean Baildon Date: Sun, 5 Mar 2023 13:09:15 +0000 Subject: [PATCH 031/815] fix(git): always set origin name when cloning (#622) * fix(git): force origin name * Revert "fix(git): honor clone.defaultRemoteName. Fixes #602" This reverts commit 5af93806aaa33fd9e8b4a7a32e9f847a3ad64c2a. --- lua/lazy/manage/git.lua | 4 +--- lua/lazy/manage/task/git.lua | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lua/lazy/manage/git.lua b/lua/lazy/manage/git.lua index 2f37456..116c5fe 100644 --- a/lua/lazy/manage/git.lua +++ b/lua/lazy/manage/git.lua @@ -196,9 +196,7 @@ end ---@param repo string function M.get_origin(repo) - local config = M.get_config(repo) - local remote = config["clone.defaultRemoteName"] or "origin" - return config["remote." .. remote .. ".url"] or config["remote.origin.url"] + return M.get_config(repo)["remote.origin.url"] end ---@param repo string diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index cc1d3c4..bcecfec 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -75,6 +75,8 @@ M.clone = { args[#args + 1] = "--recurse-submodules" end + args[#args + 1] = "--origin=origin" + args[#args + 1] = "--progress" if self.plugin.branch then From f9ddb2d41b129516faa8ff144f368b1b76f6d48d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 5 Mar 2023 13:09:59 +0000 Subject: [PATCH 032/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 7255c80..e53d566 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 04 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 05 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 47fc27e3f18ffa74cc542c5605558132e76bb00d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 6 Mar 2023 07:39:56 +0100 Subject: [PATCH 033/815] style: typo. Fixes #625 --- README.md | 3 ++- lua/lazy/core/config.lua | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e0ecbd4..4d26ae2 100644 --- a/README.md +++ b/README.md @@ -316,7 +316,7 @@ return { timeout = 120, -- kill processes that take more than 2 minutes url_format = "https://github.com/%s.git", -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This is should work, but is NOT supported and will + -- then set the below to false. This should work, but is NOT supported and will -- increase downloads a lot. filter = true, }, @@ -742,6 +742,7 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori | **LazyCommitIssue** | **_Number_** | | | **LazyCommitScope** | **_Italic_** | conventional commit scope | | **LazyCommitType** | **_Title_** | conventional commit type | +| **LazyDimmed** | **_Conceal_** | property | | **LazyDir** | **_@text.reference_** | directory | | **LazyH1** | **_IncSearch_** | home button | | **LazyH2** | **_Bold_** | titles | diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f762df2..4a89d17 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -22,7 +22,7 @@ M.defaults = { timeout = 120, -- kill processes that take more than 2 minutes url_format = "https://github.com/%s.git", -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This is should work, but is NOT supported and will + -- then set the below to false. This should work, but is NOT supported and will -- increase downloads a lot. filter = true, }, From e89acede13f46a5db229133cf0c87aee74938c56 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 6 Mar 2023 06:41:03 +0000 Subject: [PATCH 034/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index e53d566..cbdd161 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 05 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 06 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -409,7 +409,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* timeout = 120, -- kill processes that take more than 2 minutes url_format = "https://github.com/%s.git", -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This is should work, but is NOT supported and will + -- then set the below to false. This should work, but is NOT supported and will -- increase downloads a lot. filter = true, }, @@ -871,6 +871,8 @@ Click to see all highlight groups ~ LazyCommitType Title conventional commit type + LazyDimmed Conceal property + LazyDir _@text.reference_ directory LazyH1 IncSearch homebutton From 355312eb514b58b79e93753d46b2612a21949aa4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 7 Mar 2023 19:11:33 +0100 Subject: [PATCH 035/815] fix(plugin): properly pass is_list for recursively merging props --- lua/lazy/core/plugin.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index f562da4..220b70a 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -434,7 +434,7 @@ end ---@param is_list? boolean function M.values(plugin, prop, is_list) ---@type table - local ret = plugin._.super and M.values(plugin._.super, prop) or {} + local ret = plugin._.super and M.values(plugin._.super, prop, is_list) or {} local values = rawget(plugin, prop) if not values then From 3efcb149cf54ddb5b4dadeda8b6b39a4d25e5db3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 7 Mar 2023 18:12:25 +0000 Subject: [PATCH 036/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index cbdd161..994314c 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 06 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 07 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 5b4444f0d7e556deba3f7ca949a2ba0e2c3369fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:13:36 +0100 Subject: [PATCH 037/815] chore(main): release 9.10.2 (#623) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9b0d68..a078bb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [9.10.2](https://github.com/folke/lazy.nvim/compare/v9.10.1...v9.10.2) (2023-03-07) + + +### Bug Fixes + +* **git:** always set origin name when cloning ([#622](https://github.com/folke/lazy.nvim/issues/622)) ([53be2c0](https://github.com/folke/lazy.nvim/commit/53be2c0ee1848fee2a47b89d184ad02410d3c319)) +* **plugin:** properly pass is_list for recursively merging props ([355312e](https://github.com/folke/lazy.nvim/commit/355312eb514b58b79e93753d46b2612a21949aa4)) + ## [9.10.1](https://github.com/folke/lazy.nvim/compare/v9.10.0...v9.10.1) (2023-03-04) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4a89d17..ddd2ef8 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -147,7 +147,7 @@ M.defaults = { debug = false, } -M.version = "9.10.1" -- x-release-please-version +M.version = "9.10.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 8d73b9bccd1fef7a7d3f5cc990c79b2dafcd9a3a Mon Sep 17 00:00:00 2001 From: tobiaslieber <14908876+tobiaslieber@users.noreply.github.com> Date: Mon, 13 Mar 2023 22:50:50 +0100 Subject: [PATCH 038/815] fix(cache): path (#645) --- lua/lazy/core/cache.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index c9313cd..22e09c3 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -341,7 +341,7 @@ function M.lsmod(path) break end -- HACK: type is not always returned due to a bug in luv - t = t or uv.fs_stat(path .. "/" .. name).type + t = t or uv.fs_stat(path .. "/lua/" .. name).type ---@type string local topname local ext = name:sub(-4) From 82793099347ed91a74fa265077f5e60119999722 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 13 Mar 2023 21:51:35 +0000 Subject: [PATCH 039/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 994314c..654a13e 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 07 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 13 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 623e00cabbc908f635150e73d4250cf4f241d919 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 13 Mar 2023 22:56:12 +0100 Subject: [PATCH 040/815] chore(main): release 9.10.3 (#646) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a078bb0..8faad58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.10.3](https://github.com/folke/lazy.nvim/compare/v9.10.2...v9.10.3) (2023-03-13) + + +### Bug Fixes + +* **cache:** path ([#645](https://github.com/folke/lazy.nvim/issues/645)) ([8d73b9b](https://github.com/folke/lazy.nvim/commit/8d73b9bccd1fef7a7d3f5cc990c79b2dafcd9a3a)) + ## [9.10.2](https://github.com/folke/lazy.nvim/compare/v9.10.1...v9.10.2) (2023-03-07) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index ddd2ef8..5b43d72 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -147,7 +147,7 @@ M.defaults = { debug = false, } -M.version = "9.10.2" -- x-release-please-version +M.version = "9.10.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 10f5844abf30eb9b180efece36639b6eecb33e86 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 11:17:54 +0100 Subject: [PATCH 041/815] fix(loader): never load lua files from a plugin where cond=false. Show error instead --- lua/lazy/core/loader.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 833b432..6ac898c 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -460,6 +460,9 @@ function M.auto_load(modname, modpath) error("Plugin " .. plugin.name .. " is not loaded and is configured with module=false") end M.load(plugin, { require = modname }) + if plugin._.cond == false then + error("You're trying to load `" .. plugin.name .. "` for which `cond==false`") + end end return true end @@ -470,7 +473,6 @@ end function M.loader(modname) local paths = Util.get_unloaded_rtp(modname) local modpath, hash = Cache._Cache.find(modname, { rtp = false, paths = paths }) - -- print(modname .. " " .. paths[1]) if modpath then M.auto_load(modname, modpath) local mod = package.loaded[modname] From 9afba388facee5ce45d244c0e10ce650d42d9495 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 11:19:51 +0100 Subject: [PATCH 042/815] feat(plugin): added config.defaults.cond. Fixes #640 --- README.md | 5 ++++- lua/lazy/core/config.lua | 3 +++ lua/lazy/core/loader.lua | 8 ++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4d26ae2..0dfc7c6 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ require("lazy").setup({ | **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 | | **enabled** | `boolean?` or `fun():boolean` | When `false`, or if the `function` returns false, then this plugin will not be included in the spec | -| **cond** | `boolean?` or `fun():boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | +| **cond** | `boolean?` or `fun(LazyPlugin):boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | | **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | | **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | | **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | @@ -303,6 +303,9 @@ return { defaults = { lazy = false, -- should plugins be lazy-loaded? version = nil, + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil -- version = "*", -- enable this to try installing the latest stable versions of plugins }, -- leave nil when passing the spec as the first argument to setup() diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 5b43d72..043cac8 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -9,6 +9,9 @@ M.defaults = { defaults = { lazy = false, -- should plugins be lazy-loaded? version = nil, + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil -- version = "*", -- enable this to try installing the latest stable versions of plugins }, -- leave nil when passing the spec as the first argument to setup() diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 6ac898c..118a61f 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -266,8 +266,12 @@ function M._load(plugin, reason, opts) return Util.error("Plugin " .. plugin.name .. " is not installed") end - if plugin.cond ~= nil and not (opts and opts.force) then - if plugin.cond == false or (type(plugin.cond) == "function" and not plugin.cond()) then + local cond = plugin.cond + if cond == nil then + cond = Config.options.defaults.cond + end + if cond ~= nil and not (opts and opts.force) then + if cond == false or (type(cond) == "function" and not cond(plugin)) then plugin._.cond = false return end From 51c07f734f9854187429f9fa25ade8bff4e271d8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 14 Mar 2023 10:20:47 +0000 Subject: [PATCH 043/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 654a13e..f4b96cb 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 13 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 14 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -129,7 +129,7 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* enabled boolean? or fun():boolean When false, or if the function returns false, then this plugin will not be included in the spec - cond boolean? or fun():boolean When false, or if the function returns false, then + cond boolean? or fun(LazyPlugin):boolean When false, or if the function returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. @@ -396,6 +396,9 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* defaults = { lazy = false, -- should plugins be lazy-loaded? version = nil, + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil -- version = "", -- enable this to try installing the latest stable versions of plugins }, -- leave nil when passing the spec as the first argument to setup() From 5550f9927195dee9444eee4f26b1a22fcd88a191 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 14 Mar 2023 11:27:31 +0100 Subject: [PATCH 044/815] chore(main): release 9.11.0 (#652) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8faad58..902c3e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [9.11.0](https://github.com/folke/lazy.nvim/compare/v9.10.3...v9.11.0) (2023-03-14) + + +### Features + +* **plugin:** added config.defaults.cond. Fixes [#640](https://github.com/folke/lazy.nvim/issues/640) ([9afba38](https://github.com/folke/lazy.nvim/commit/9afba388facee5ce45d244c0e10ce650d42d9495)) + + +### Bug Fixes + +* **loader:** never load lua files from a plugin where cond=false. Show error instead ([10f5844](https://github.com/folke/lazy.nvim/commit/10f5844abf30eb9b180efece36639b6eecb33e86)) + ## [9.10.3](https://github.com/folke/lazy.nvim/compare/v9.10.2...v9.10.3) (2023-03-13) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 043cac8..531ad99 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -150,7 +150,7 @@ M.defaults = { debug = false, } -M.version = "9.10.3" -- x-release-please-version +M.version = "9.11.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 1a34636094f105c6c7d55b15149ed5e8e168e248 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 12:56:58 +0100 Subject: [PATCH 045/815] refactor(cache): documented the cache in preparation to upstream --- lua/lazy/core/cache.lua | 67 ++++++++++++++++++++++++++++++---------- lua/lazy/core/loader.lua | 2 +- lua/lazy/core/plugin.lua | 1 - 3 files changed, 52 insertions(+), 18 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 22e09c3..0da32d0 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -51,6 +51,10 @@ function Cache.normalize(path) return path:sub(-1) == "/" and path:sub(1, -2) or path end +-- Gets the rtp excluding after directories. +-- The result is cached, and will be updated if the runtime path changes. +-- When called from a fast event, the cached value will be returned. +--- @return string[] rtp, boolean updated ---@private function Cache.get_rtp() local start = uv.hrtime() @@ -76,13 +80,17 @@ function Cache.get_rtp() return Cache._rtp, updated end +-- Returns the cache file name ---@param name string can be a module name, or a file name +---@return string file_name ---@private function Cache.cache_file(name) local ret = M.path .. "/" .. name:gsub("[/\\:]", "%%") return ret:sub(-4) == ".lua" and (ret .. "c") or (ret .. ".luac") end +-- Saves the cache entry for a given module or file +---@param name string module name or filename ---@param entry CacheEntry ---@private function Cache.write(name, entry) @@ -99,6 +107,8 @@ function Cache.write(name, entry) uv.fs_close(f) end +-- Loads the cache entry for a given module or file +---@param name string module name or filename ---@return CacheEntry? ---@private function Cache.read(name) @@ -124,11 +134,13 @@ function Cache.read(name) M.track("read", start) end ----@param modname string +-- The `package.loaders` loader for lua files using the cache. +---@param modname string module name +---@return string|function ---@private function Cache.loader(modname) local start = uv.hrtime() - local modpath, hash = Cache.find(modname) + local modpath, hash = M.find(modname) if modpath then local chunk, err = M.load(modpath, { hash = hash }) M.track("loader", start) @@ -138,11 +150,13 @@ function Cache.loader(modname) return "\nlazy_loader: module " .. modname .. " not found" end ----@param modname string +-- The `package.loaders` loader for libs +---@param modname string module name +---@return string|function ---@private function Cache.loader_lib(modname) local start = uv.hrtime() - local modpath = Cache.find(modname, { patterns = jit.os:find("Windows") and { ".dll" } or { ".so" } }) + local modpath = M.find(modname, { patterns = jit.os:find("Windows") and { ".dll" } or { ".so" } }) ---@type function?, string? if modpath then -- Making function name in Lua 5.1 (see src/loadlib.c:mkfuncname) is @@ -160,6 +174,7 @@ function Cache.loader_lib(modname) return "\nlazy_loader_lib: module " .. modname .. " not found" end +-- `loadfile` using the cache ---@param filename? string ---@param mode? "b"|"t"|"bt" ---@param env? table @@ -168,11 +183,16 @@ end function Cache.loadfile(filename, mode, env) local start = uv.hrtime() filename = Cache.normalize(filename) + mode = nil -- ignore mode, since we byte-compile the lua source files local chunk, err = M.load(filename, { mode = mode, env = env }) M.track("loadfile", start) return chunk, err end +-- Checks whether two cache hashes are the same based on: +-- * file size +-- * mtime in seconds +-- * mtime in nanoseconds ---@param h1 CacheHash ---@param h2 CacheHash ---@private @@ -180,6 +200,7 @@ function Cache.eq(h1, h2) return h1 and h2 and h1.size == h2.size and h1.mtime.sec == h2.mtime.sec and h1.mtime.nsec == h2.mtime.nsec end +-- Loads the given module path using the cache ---@param modpath string ---@param opts? {hash?: CacheHash, mode?: "b"|"t"|"bt", env?:table} ---@return function?, string? error_message @@ -220,10 +241,11 @@ function M.load(modpath, opts) return chunk, err end +-- Finds the module path for the given module name ---@param modname string ---@param opts? CacheFindOpts ----@return string? modpath, CacheHash? hash, CacheEntry? entry -function Cache.find(modname, opts) +---@return string? modpath, CacheHash? hash +function M.find(modname, opts) local start = uv.hrtime() opts = opts or {} @@ -231,12 +253,15 @@ function Cache.find(modname, opts) local basename = modname:gsub("%.", "/") local idx = modname:find(".", 1, true) - -- HACK: fix incorrect require statements. Really not a fan of keeping this + -- HACK: fix incorrect require statements. Really not a fan of keeping this, + -- but apparently the regular lua loader also allows this if idx == 1 then modname = modname:gsub("^%.+", "") basename = modname:gsub("%.", "/") idx = modname:find(".", 1, true) end + + -- get the top-level module name local topmod = idx and modname:sub(1, idx - 1) or modname -- OPTIM: search for a directory first when topmod == modname @@ -245,7 +270,11 @@ function Cache.find(modname, opts) patterns[p] = "/lua/" .. basename .. pattern end + -- Checks if the given paths contain the top-level module. + -- If so, it tries to find the module path for the given module name. ---@param paths string[] + ---@return string? modpath, CacheHash? hash + ---@private local function _find(paths) for _, path in ipairs(paths) do if M.lsmod(path)[topmod] then @@ -261,9 +290,10 @@ function Cache.find(modname, opts) end end - ---@type string, CacheHash + ---@type string?, CacheHash? local modpath, hash + -- always check the rtp first if opts.rtp ~= false then modpath, hash = _find(Cache._rtp or {}) if not modpath then @@ -273,6 +303,8 @@ function Cache.find(modname, opts) end end end + + -- check any additional paths if (not modpath) and opts.paths then modpath, hash = _find(opts.paths) end @@ -291,6 +323,11 @@ function M.reset(path) Cache._indexed[Cache.normalize(path)] = nil end +-- Enables the cache: +-- * override loadfile +-- * adds the lua loader +-- * adds the libs loader +-- * remove the Neovim loader function M.enable() if M.enabled then return @@ -312,6 +349,9 @@ function M.enable() end end +-- Disables the cache: +-- * removes the cache loaders +-- * adds the Neovim loader function M.disable() if not M.enabled then return @@ -365,14 +405,7 @@ function M.lsmod(path) return Cache._indexed[path] end ----@param modname string ----@param opts? CacheFindOpts ----@return string? modpath -function M.find(modname, opts) - local modpath = Cache.find(modname, opts) - return modpath -end - +-- Debug function that wrapps all loaders and tracks stats function M.profile_loaders() for l, loader in pairs(package.loaders) do local loc = debug.getinfo(loader, "Sn").source:sub(2) @@ -386,7 +419,9 @@ function M.profile_loaders() end end +-- Prints all cache stats function M.inspect() + ---@private local function ms(nsec) return math.floor(nsec / 1e6 * 1000 + 0.5) / 1000 .. "ms" end diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 118a61f..86bb692 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -476,7 +476,7 @@ end ---@param modname string function M.loader(modname) local paths = Util.get_unloaded_rtp(modname) - local modpath, hash = Cache._Cache.find(modname, { rtp = false, paths = paths }) + local modpath, hash = Cache.find(modname, { rtp = false, paths = paths }) if modpath then M.auto_load(modname, modpath) local mod = package.loaded[modname] diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 220b70a..e942753 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -250,7 +250,6 @@ function Spec:import(spec) return end - Cache.indexed_unloaded = false self.modules[#self.modules + 1] = spec.import local imported = 0 From 49dda8751e99aae2ae7073c6374bc1b8c38d0649 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 13:07:56 +0100 Subject: [PATCH 046/815] feat(cache): remove any mentions of lazy. Move the cache to cache/luac instead of cache/lazy/luac --- lua/lazy/core/cache.lua | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 0da32d0..64eca69 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -12,8 +12,9 @@ local M = {} ---@field paths? string[] Extra paths to search for modname M.VERSION = 2 -M.path = vim.fn.stdpath("cache") .. "/lazy/luac" +M.path = vim.fn.stdpath("cache") .. "/luac" M.enabled = false +---@type table M.stats = { find = { total = 0, time = 0, not_found = 0 }, } @@ -147,7 +148,7 @@ function Cache.loader(modname) return chunk or error(err) end M.track("loader", start) - return "\nlazy_loader: module " .. modname .. " not found" + return "\ncache_loader: module " .. modname .. " not found" end -- The `package.loaders` loader for libs @@ -171,7 +172,7 @@ function Cache.loader_lib(modname) return chunk or error(err) end M.track("loader_lib", start) - return "\nlazy_loader_lib: module " .. modname .. " not found" + return "\ncache_loader_lib: module " .. modname .. " not found" end -- `loadfile` using the cache @@ -347,6 +348,9 @@ function M.enable() break end end + -- TODO: add an autocmd on BufWritePost that checks if its in a /lua folder + -- if thats the case, then reset the plugin path. + -- This will make sure we can properly load new top-level lua modules end -- Disables the cache: From d0db9f83efd8f5761b8b464ff37d38a9833698c3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 14:07:41 +0100 Subject: [PATCH 047/815] docs(cache): more code comments --- lua/lazy/core/cache.lua | 80 ++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 33 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 64eca69..7a8c3c0 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -1,3 +1,8 @@ +-- interop with the native Neovim cache +if type(package.loaded["vim.cache"]) == "table" then + return package.loaded["vim.cache"] +end + local ffi = require("ffi") local uv = vim.loop @@ -31,14 +36,16 @@ local Cache = { _loadfile = loadfile, } +--- Tracks the time spent in a function +---@private function M.track(stat, start) M.stats[stat] = M.stats[stat] or { total = 0, time = 0 } M.stats[stat].total = M.stats[stat].total + 1 M.stats[stat].time = M.stats[stat].time + uv.hrtime() - start end --- slightly faster/different version than vim.fs.normalize --- we also need to have it here, since the cache will load vim.fs +--- slightly faster/different version than vim.fs.normalize +--- we also need to have it here, since the cache will load vim.fs ---@private function Cache.normalize(path) if path:sub(1, 1) == "~" then @@ -52,9 +59,9 @@ function Cache.normalize(path) return path:sub(-1) == "/" and path:sub(1, -2) or path end --- Gets the rtp excluding after directories. --- The result is cached, and will be updated if the runtime path changes. --- When called from a fast event, the cached value will be returned. +--- Gets the rtp excluding after directories. +--- The result is cached, and will be updated if the runtime path changes. +--- When called from a fast event, the cached value will be returned. --- @return string[] rtp, boolean updated ---@private function Cache.get_rtp() @@ -81,7 +88,7 @@ function Cache.get_rtp() return Cache._rtp, updated end --- Returns the cache file name +--- Returns the cache file name ---@param name string can be a module name, or a file name ---@return string file_name ---@private @@ -90,7 +97,7 @@ function Cache.cache_file(name) return ret:sub(-4) == ".lua" and (ret .. "c") or (ret .. ".luac") end --- Saves the cache entry for a given module or file +--- Saves the cache entry for a given module or file ---@param name string module name or filename ---@param entry CacheEntry ---@private @@ -108,7 +115,7 @@ function Cache.write(name, entry) uv.fs_close(f) end --- Loads the cache entry for a given module or file +--- Loads the cache entry for a given module or file ---@param name string module name or filename ---@return CacheEntry? ---@private @@ -135,7 +142,7 @@ function Cache.read(name) M.track("read", start) end --- The `package.loaders` loader for lua files using the cache. +--- The `package.loaders` loader for lua files using the cache. ---@param modname string module name ---@return string|function ---@private @@ -151,7 +158,7 @@ function Cache.loader(modname) return "\ncache_loader: module " .. modname .. " not found" end --- The `package.loaders` loader for libs +--- The `package.loaders` loader for libs ---@param modname string module name ---@return string|function ---@private @@ -175,7 +182,7 @@ function Cache.loader_lib(modname) return "\ncache_loader_lib: module " .. modname .. " not found" end --- `loadfile` using the cache +--- `loadfile` using the cache ---@param filename? string ---@param mode? "b"|"t"|"bt" ---@param env? table @@ -190,10 +197,10 @@ function Cache.loadfile(filename, mode, env) return chunk, err end --- Checks whether two cache hashes are the same based on: --- * file size --- * mtime in seconds --- * mtime in nanoseconds +--- Checks whether two cache hashes are the same based on: +--- * file size +--- * mtime in seconds +--- * mtime in nanoseconds ---@param h1 CacheHash ---@param h2 CacheHash ---@private @@ -201,11 +208,14 @@ function Cache.eq(h1, h2) return h1 and h2 and h1.size == h2.size and h1.mtime.sec == h2.mtime.sec and h1.mtime.nsec == h2.mtime.nsec end --- Loads the given module path using the cache +--- Loads the given module path using the cache ---@param modpath string ----@param opts? {hash?: CacheHash, mode?: "b"|"t"|"bt", env?:table} +---@param opts? {hash?: CacheHash, mode?: "b"|"t"|"bt", env?:table} (table|nil) Options for loading the module: +--- - hash: (table) the hash of the file to load if it is already known. (defaults to `vim.loop.fs_stat({modpath})`) +--- - mode: (string) the mode to load the module with. "b"|"t"|"bt" (defaults to `nil`) +--- - env: (table) the environment to load the module in. (defaults to `nil`) +---@see |luaL_loadfile()| ---@return function?, string? error_message ----@private function M.load(modpath, opts) local start = uv.hrtime() @@ -242,10 +252,13 @@ function M.load(modpath, opts) return chunk, err end --- Finds the module path for the given module name +--- Finds the module path for the given module name ---@param modname string ----@param opts? CacheFindOpts ----@return string? modpath, CacheHash? hash +---@param opts? CacheFindOpts (table|nil) Options for finding a module: +--- - rtp: (boolean) Search for modname in the runtime path (defaults to `true`) +--- - patterns: (string[]) Paterns to use (defaults to `{"/init.lua", ".lua"}`) +--- - paths: (string[]) Extra paths to search for modname (defaults to `{}`) +---@return string? modpath, CacheHash? hash (string|nil) modpath for the module function M.find(modname, opts) local start = uv.hrtime() opts = opts or {} @@ -319,16 +332,16 @@ function M.find(modname, opts) end --- Resets the topmods cache for the path ----@param path string +---@param path string path to reset function M.reset(path) Cache._indexed[Cache.normalize(path)] = nil end --- Enables the cache: --- * override loadfile --- * adds the lua loader --- * adds the libs loader --- * remove the Neovim loader +--- Enables the cache: +--- * override loadfile +--- * adds the lua loader +--- * adds the libs loader +--- * remove the Neovim loader function M.enable() if M.enabled then return @@ -353,9 +366,9 @@ function M.enable() -- This will make sure we can properly load new top-level lua modules end --- Disables the cache: --- * removes the cache loaders --- * adds the Neovim loader +--- Disables the cache: +--- * removes the cache loaders +--- * adds the Neovim loader function M.disable() if not M.enabled then return @@ -372,7 +385,8 @@ function M.disable() table.insert(package.loaders, 2, vim._load_package) end --- Return the top-level `/lua/*` modules for this path +--- Return the top-level `/lua/*` modules for this path +---@param path string path to check for top-level lua modules ---@return string[] function M.lsmod(path) if not Cache._indexed[path] then @@ -409,7 +423,7 @@ function M.lsmod(path) return Cache._indexed[path] end --- Debug function that wrapps all loaders and tracks stats +--- Debug function that wrapps all loaders and tracks stats function M.profile_loaders() for l, loader in pairs(package.loaders) do local loc = debug.getinfo(loader, "Sn").source:sub(2) @@ -423,7 +437,7 @@ function M.profile_loaders() end end --- Prints all cache stats +--- Prints all cache stats function M.inspect() ---@private local function ms(nsec) From 0b7596f609c4f2620240c6ba8218e065610255e6 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 18:31:43 +0100 Subject: [PATCH 048/815] style(cache): disable duplicate warnings --- lua/lazy/core/cache.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 7a8c3c0..7ca5a35 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -1,3 +1,7 @@ +---@diagnostic disable: duplicate-doc-alias +---@diagnostic disable: duplicate-doc-field +---@diagnostic disable: duplicate-set-field + -- interop with the native Neovim cache if type(package.loaded["vim.cache"]) == "table" then return package.loaded["vim.cache"] From da295017e423b1a1ab81d7234b887a841218093c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 18:32:29 +0100 Subject: [PATCH 049/815] refactor(cache): Cache.track => Cache._track --- lua/lazy/core/cache.lua | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 7ca5a35..ff7785f 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -42,7 +42,7 @@ local Cache = { --- Tracks the time spent in a function ---@private -function M.track(stat, start) +function M._track(stat, start) M.stats[stat] = M.stats[stat] or { total = 0, time = 0 } M.stats[stat].total = M.stats[stat].total + 1 M.stats[stat].time = M.stats[stat].time + uv.hrtime() - start @@ -71,7 +71,7 @@ end function Cache.get_rtp() local start = uv.hrtime() if vim.in_fast_event() then - M.track("get_rtp", start) + M._track("get_rtp", start) return (Cache._rtp or {}), false end local updated = false @@ -88,7 +88,7 @@ function Cache.get_rtp() updated = true Cache._rtp_key = key end - M.track("get_rtp", start) + M._track("get_rtp", start) return Cache._rtp, updated end @@ -143,7 +143,7 @@ function Cache.read(name) chunk = data:sub(16 + 1), } end - M.track("read", start) + M._track("read", start) end --- The `package.loaders` loader for lua files using the cache. @@ -155,10 +155,10 @@ function Cache.loader(modname) local modpath, hash = M.find(modname) if modpath then local chunk, err = M.load(modpath, { hash = hash }) - M.track("loader", start) + M._track("loader", start) return chunk or error(err) end - M.track("loader", start) + M._track("loader", start) return "\ncache_loader: module " .. modname .. " not found" end @@ -179,10 +179,10 @@ function Cache.loader_lib(modname) local dash = modname:find("-", 1, true) local funcname = dash and modname:sub(dash + 1) or modname local chunk, err = package.loadlib(modpath, "luaopen_" .. funcname:gsub("%.", "_")) - M.track("loader_lib", start) + M._track("loader_lib", start) return chunk or error(err) end - M.track("loader_lib", start) + M._track("loader_lib", start) return "\ncache_loader_lib: module " .. modname .. " not found" end @@ -197,7 +197,7 @@ function Cache.loadfile(filename, mode, env) filename = Cache.normalize(filename) mode = nil -- ignore mode, since we byte-compile the lua source files local chunk, err = M.load(filename, { mode = mode, env = env }) - M.track("loadfile", start) + M._track("loadfile", start) return chunk, err end @@ -231,7 +231,7 @@ function M.load(modpath, opts) if not hash then -- trigger correct error chunk, err = Cache._loadfile(modpath, opts.mode, opts.env) - M.track("load", start) + M._track("load", start) return chunk, err end @@ -241,7 +241,7 @@ function M.load(modpath, opts) -- selene: allow(incorrect_standard_library_use) chunk, err = load(entry.chunk --[[@as string]], "@" .. modpath, opts.mode, opts.env) if not (err and err:find("cannot load incompatible bytecode", 1, true)) then - M.track("load", start) + M._track("load", start) return chunk, err end end @@ -252,7 +252,7 @@ function M.load(modpath, opts) entry.chunk = string.dump(chunk) Cache.write(modpath, entry) end - M.track("load", start) + M._track("load", start) return chunk, err end @@ -327,7 +327,7 @@ function M.find(modname, opts) modpath, hash = _find(opts.paths) end - M.track("find", start) + M._track("find", start) if modpath then return modpath, hash end @@ -422,7 +422,7 @@ function M.lsmod(path) end end end - M.track("lsmod", start) + M._track("lsmod", start) end return Cache._indexed[path] end @@ -434,8 +434,8 @@ function M.profile_loaders() package.loaders[l] = function(modname) local start = vim.loop.hrtime() local ret = loader(modname) - M.track("loader " .. l .. ": " .. loc, start) - M.track("loader_all", start) + M._track("loader " .. l .. ": " .. loc, start) + M._track("loader_all", start) return ret end end From 810acc1e86180403308e1cf650ed9fb0c5d27a44 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 18:33:16 +0100 Subject: [PATCH 050/815] feat(cache): drop dependency on ffi --- lua/lazy/core/cache.lua | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index ff7785f..d164f9a 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -7,7 +7,6 @@ if type(package.loaded["vim.cache"]) == "table" then return package.loaded["vim.cache"] end -local ffi = require("ffi") local uv = vim.loop local M = {} @@ -20,7 +19,7 @@ local M = {} ---@field patterns? string[] Paterns to use (defaults to `{"/init.lua", ".lua"}`) ---@field paths? string[] Extra paths to search for modname -M.VERSION = 2 +M.VERSION = 3 M.path = vim.fn.stdpath("cache") .. "/luac" M.enabled = false ---@type table @@ -114,7 +113,7 @@ function Cache.write(name, entry) entry.hash.mtime.sec, entry.hash.mtime.nsec, } - uv.fs_write(f, ffi.string(ffi.new("const uint32_t[4]", header), 16)) + uv.fs_write(f, table.concat(header, ",") .. "\0") uv.fs_write(f, entry.chunk) uv.fs_close(f) end @@ -132,15 +131,17 @@ function Cache.read(name) local data = uv.fs_read(f, hash.size, 0) --[[@as string]] uv.fs_close(f) + local zero = data:find("\0", 1, true) + ---@type integer[]|{[0]:integer} - local header = ffi.cast("uint32_t*", ffi.new("const char[16]", data:sub(1, 16))) - if header[0] ~= M.VERSION then + local header = vim.split(data:sub(1, zero - 1), ",") + if tonumber(header[1]) ~= M.VERSION then return end - M.track("read", start) + M._track("read", start) return { - hash = { size = header[1], mtime = { sec = header[2], nsec = header[3] } }, - chunk = data:sub(16 + 1), + hash = { size = tonumber(header[2]), mtime = { sec = tonumber(header[3]), nsec = tonumber(header[4]) } }, + chunk = data:sub(zero + 1), } end M._track("read", start) From 2a88a73acea8cc7988e5114097213528f7c510f3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 18:33:39 +0100 Subject: [PATCH 051/815] style(cache): ignore a luacheck error --- lua/lazy/core/cache.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index d164f9a..a856db6 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -193,6 +193,7 @@ end ---@param env? table ---@return function?, string? error_message ---@private +-- luacheck: ignore 312 function Cache.loadfile(filename, mode, env) local start = uv.hrtime() filename = Cache.normalize(filename) @@ -332,6 +333,7 @@ function M.find(modname, opts) if modpath then return modpath, hash end + -- module not found M.stats.find.not_found = M.stats.find.not_found + 1 end From 4446d69c28aa27c2621bdb185e4a0afef355987e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 18:37:27 +0100 Subject: [PATCH 052/815] build(cache): added script to sync cache implementation with Neovim --- lua/lazy/core/cache.lua | 1 + scripts/update-neovim-cache | 4 ++++ 2 files changed, 5 insertions(+) create mode 100755 scripts/update-neovim-cache diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index a856db6..d96875a 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -7,6 +7,7 @@ if type(package.loaded["vim.cache"]) == "table" then return package.loaded["vim.cache"] end +-- NEOVIM local uv = vim.loop local M = {} diff --git a/scripts/update-neovim-cache b/scripts/update-neovim-cache new file mode 100755 index 0000000..89b5665 --- /dev/null +++ b/scripts/update-neovim-cache @@ -0,0 +1,4 @@ +#!/bin/env bash +cd ~/projects/neovim || exit +sed -n '/NEOVIM/,$p' ~/projects/lazy.nvim/lua/lazy/core/cache.lua | sed '1d' | rg -v "selene" >./runtime/lua/vim/cache.lua +stylua ./runtime/lua/vim/cache.lua From ea1a044e3c819693565e0d73994587023b8e5e90 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 19:45:22 +0100 Subject: [PATCH 053/815] feat(cache): use `vim.cache` everywhere. poly-fill when needed --- lua/lazy/core/config.lua | 1 - lua/lazy/core/loader.lua | 9 ++++----- lua/lazy/core/plugin.lua | 2 -- lua/lazy/core/util.lua | 3 +-- lua/lazy/init.lua | 11 ++++++++--- lua/lazy/view/render.lua | 3 +-- 6 files changed, 14 insertions(+), 15 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 531ad99..84af79f 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -183,7 +183,6 @@ function M.setup(opts) if type(M.options.spec) == "string" then M.options.spec = { import = M.options.spec } end - M.options.performance.cache = require("lazy.core.cache").config table.insert(M.options.install.colorscheme, "habamax") M.options.root = Util.norm(M.options.root) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 86bb692..1d4e745 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -1,7 +1,6 @@ local Util = require("lazy.core.util") local Config = require("lazy.core.config") local Handler = require("lazy.core.handler") -local Cache = require("lazy.core.cache") local Plugin = require("lazy.core.plugin") ---@class LazyCoreLoader @@ -73,7 +72,7 @@ function M.install_missing() -- remove and installed plugins from indexed, so cache will index again for _, p in pairs(Config.plugins) do if p._.installed then - Cache.reset(p.dir) + vim.cache.reset(p.dir) end end -- reload plugins @@ -346,7 +345,7 @@ function M.get_main(plugin) local normname = Util.normname(plugin.name) ---@type string[] local mods = {} - for modname, _ in pairs(Cache.lsmod(plugin.dir)) do + for modname, _ in pairs(vim.cache.lsmod(plugin.dir)) do mods[#mods + 1] = modname local modnorm = Util.normname(modname) -- if we found an exact match, then use that @@ -476,7 +475,7 @@ end ---@param modname string function M.loader(modname) local paths = Util.get_unloaded_rtp(modname) - local modpath, hash = Cache.find(modname, { rtp = false, paths = paths }) + local modpath, hash = vim.cache.find(modname, { rtp = false, paths = paths }) if modpath then M.auto_load(modname, modpath) local mod = package.loaded[modname] @@ -485,7 +484,7 @@ function M.loader(modname) return mod end end - return Cache.load(modpath, { hash = hash }) + return vim.cache.load(modpath, { hash = hash }) end end diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index e942753..a0b1428 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -1,7 +1,6 @@ local Config = require("lazy.core.config") local Util = require("lazy.core.util") local Handler = require("lazy.core.handler") -local Cache = require("lazy.core.cache") ---@class LazyCorePlugin local M = {} @@ -395,7 +394,6 @@ function M.load() Util.track("state") M.update_state() Util.track() - require("lazy.core.cache").indexed_unloaded = false M.loading = false end diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 42325dd..0450cb0 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -241,8 +241,7 @@ function M.get_unloaded_rtp(modname) end function M.find_root(modname) - local Cache = require("lazy.core.cache") - local modpath = Cache.find(modname, { + local modpath = vim.cache.find(modname, { rtp = true, paths = M.get_unloaded_rtp(modname), patterns = { "", ".lua" }, diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index cb6b732..9b29adb 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -33,15 +33,20 @@ function M.setup(spec, opts) end local start = vim.loop.hrtime() - -- load module cache before anything else + -- poly-fill vim.cache + if not vim.cache then + vim.cache = require("lazy.core.cache") + end + local enable_cache = not ( opts and opts.performance and opts.performance.cache and opts.performance.cache.enabled == false ) + -- load module cache before anything else if enable_cache then - require("lazy.core.cache").enable() + vim.cache.enable() end require("lazy.stats").track("LazyStart") @@ -53,7 +58,7 @@ function M.setup(spec, opts) table.insert(package.loaders, 3, Loader.loader) if vim.g.profile_loaders then - require("lazy.core.cache").profile_loaders() + vim.cache.profile_loaders() end Util.track({ plugin = "lazy.nvim" }) -- setup start diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 00f4072..9735bb9 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -5,7 +5,6 @@ local Handler = require("lazy.core.handler") local Git = require("lazy.manage.git") local Plugin = require("lazy.core.plugin") local ViewConfig = require("lazy.view.config") -local Cache = require("lazy.core.cache") local Text = require("lazy.view.text") @@ -676,7 +675,7 @@ function M:debug() end) self:nl() - Util.foreach(Cache.stats, function(name, stats) + Util.foreach(vim.cache.stats, function(name, stats) self:append(name, "LazyH2"):nl() local props = { { "total", stats.total or 0, "Number" }, From 5b7b8c51495de8ced973cc23f0a58cadd21de875 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 14 Mar 2023 19:54:44 +0100 Subject: [PATCH 054/815] feat(cache): automatically reset topmods when a user changes a file for a path on the rtp --- lua/lazy/core/cache.lua | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index d96875a..522b2ac 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -369,9 +369,19 @@ function M.enable() break end end - -- TODO: add an autocmd on BufWritePost that checks if its in a /lua folder - -- if thats the case, then reset the plugin path. - -- This will make sure we can properly load new top-level lua modules + + -- this will reset the top-mods in case someone adds a new + -- top-level lua module to a path already on the rtp + vim.api.nvim_create_autocmd("BufWritePost", { + group = vim.api.nvim_create_augroup("cache_topmods_reset", { clear = true }), + callback = function(event) + local bufname = event.match ---@type string + local idx = bufname:find("/lua/", 1, true) + if idx then + M.reset(bufname:sub(1, idx - 1)) + end + end, + }) end --- Disables the cache: @@ -391,6 +401,7 @@ function M.disable() end end table.insert(package.loaders, 2, vim._load_package) + vim.api.nvim_del_augroup_by_name("cache_topmods_reset") end --- Return the top-level `/lua/*` modules for this path From 942c805b8427e3b4b9586e27702eeceacf967549 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 15 Mar 2023 08:53:19 +0100 Subject: [PATCH 055/815] fix(cache): remove dependency on jit --- lua/lazy/core/cache.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 522b2ac..fac7262 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -170,7 +170,8 @@ end ---@private function Cache.loader_lib(modname) local start = uv.hrtime() - local modpath = M.find(modname, { patterns = jit.os:find("Windows") and { ".dll" } or { ".so" } }) + local is_win = uv.os_uname().sysname:lower():find("win", 1, true) + local modpath = M.find(modname, { patterns = is_win and { ".dll" } or { ".so" } }) ---@type function?, string? if modpath then -- Making function name in Lua 5.1 (see src/loadlib.c:mkfuncname) is From 21a219a825cd9d9b049471ccd7831d117d7cede3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 15 Mar 2023 09:01:00 +0100 Subject: [PATCH 056/815] refactor(cache): revert all `vim.cache` changes and disable it if it would ever exist --- lua/lazy/core/cache.lua | 10 ---------- lua/lazy/core/loader.lua | 9 +++++---- lua/lazy/core/util.lua | 2 +- lua/lazy/init.lua | 12 +++++++----- lua/lazy/view/render.lua | 2 +- scripts/update-neovim-cache | 4 ---- 6 files changed, 14 insertions(+), 25 deletions(-) delete mode 100755 scripts/update-neovim-cache diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index fac7262..7a4c0d7 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -1,13 +1,3 @@ ----@diagnostic disable: duplicate-doc-alias ----@diagnostic disable: duplicate-doc-field ----@diagnostic disable: duplicate-set-field - --- interop with the native Neovim cache -if type(package.loaded["vim.cache"]) == "table" then - return package.loaded["vim.cache"] -end - --- NEOVIM local uv = vim.loop local M = {} diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 1d4e745..85954f6 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -2,6 +2,7 @@ local Util = require("lazy.core.util") local Config = require("lazy.core.config") local Handler = require("lazy.core.handler") local Plugin = require("lazy.core.plugin") +local Cache = require("lazy.core.cache") ---@class LazyCoreLoader local M = {} @@ -72,7 +73,7 @@ function M.install_missing() -- remove and installed plugins from indexed, so cache will index again for _, p in pairs(Config.plugins) do if p._.installed then - vim.cache.reset(p.dir) + Cache.reset(p.dir) end end -- reload plugins @@ -345,7 +346,7 @@ function M.get_main(plugin) local normname = Util.normname(plugin.name) ---@type string[] local mods = {} - for modname, _ in pairs(vim.cache.lsmod(plugin.dir)) do + for modname, _ in pairs(Cache.lsmod(plugin.dir)) do mods[#mods + 1] = modname local modnorm = Util.normname(modname) -- if we found an exact match, then use that @@ -475,7 +476,7 @@ end ---@param modname string function M.loader(modname) local paths = Util.get_unloaded_rtp(modname) - local modpath, hash = vim.cache.find(modname, { rtp = false, paths = paths }) + local modpath, hash = Cache.find(modname, { rtp = false, paths = paths }) if modpath then M.auto_load(modname, modpath) local mod = package.loaded[modname] @@ -484,7 +485,7 @@ function M.loader(modname) return mod end end - return vim.cache.load(modpath, { hash = hash }) + return Cache.load(modpath, { hash = hash }) end end diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 0450cb0..10c5c0a 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -241,7 +241,7 @@ function M.get_unloaded_rtp(modname) end function M.find_root(modname) - local modpath = vim.cache.find(modname, { + local modpath = require("lazy.core.cache").find(modname, { rtp = true, paths = M.get_unloaded_rtp(modname), patterns = { "", ".lua" }, diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index 9b29adb..14a8de5 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -33,11 +33,13 @@ function M.setup(spec, opts) end local start = vim.loop.hrtime() - -- poly-fill vim.cache - if not vim.cache then - vim.cache = require("lazy.core.cache") + -- disable the Neovim cache if it would ever be added + if vim.cache and vim.cache.disable then + vim.cache.disable() end + local Cache = require("lazy.core.cache") + local enable_cache = not ( opts and opts.performance @@ -46,7 +48,7 @@ function M.setup(spec, opts) ) -- load module cache before anything else if enable_cache then - vim.cache.enable() + Cache.enable() end require("lazy.stats").track("LazyStart") @@ -58,7 +60,7 @@ function M.setup(spec, opts) table.insert(package.loaders, 3, Loader.loader) if vim.g.profile_loaders then - vim.cache.profile_loaders() + Cache.profile_loaders() end Util.track({ plugin = "lazy.nvim" }) -- setup start diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 9735bb9..0a1cd80 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -675,7 +675,7 @@ function M:debug() end) self:nl() - Util.foreach(vim.cache.stats, function(name, stats) + Util.foreach(require("lazy.core.cache").stats, function(name, stats) self:append(name, "LazyH2"):nl() local props = { { "total", stats.total or 0, "Number" }, diff --git a/scripts/update-neovim-cache b/scripts/update-neovim-cache deleted file mode 100755 index 89b5665..0000000 --- a/scripts/update-neovim-cache +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/env bash -cd ~/projects/neovim || exit -sed -n '/NEOVIM/,$p' ~/projects/lazy.nvim/lua/lazy/core/cache.lua | sed '1d' | rg -v "selene" >./runtime/lua/vim/cache.lua -stylua ./runtime/lua/vim/cache.lua From 6014f8de311d85866b453a7d8fbe6eac54f6ff4e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 15 Mar 2023 08:01:46 +0000 Subject: [PATCH 057/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index f4b96cb..5e5fcb0 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 14 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 15 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From e27c9df5fe039e9d2833ef4fcf7305595d5ccda7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Mar 2023 09:04:59 +0100 Subject: [PATCH 058/815] chore(main): release 9.12.0 (#653) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 15 +++++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 902c3e6..4532af5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [9.12.0](https://github.com/folke/lazy.nvim/compare/v9.11.0...v9.12.0) (2023-03-15) + + +### Features + +* **cache:** automatically reset topmods when a user changes a file for a path on the rtp ([5b7b8c5](https://github.com/folke/lazy.nvim/commit/5b7b8c51495de8ced973cc23f0a58cadd21de875)) +* **cache:** drop dependency on ffi ([810acc1](https://github.com/folke/lazy.nvim/commit/810acc1e86180403308e1cf650ed9fb0c5d27a44)) +* **cache:** remove any mentions of lazy. Move the cache to cache/luac instead of cache/lazy/luac ([49dda87](https://github.com/folke/lazy.nvim/commit/49dda8751e99aae2ae7073c6374bc1b8c38d0649)) +* **cache:** use `vim.cache` everywhere. poly-fill when needed ([ea1a044](https://github.com/folke/lazy.nvim/commit/ea1a044e3c819693565e0d73994587023b8e5e90)) + + +### Bug Fixes + +* **cache:** remove dependency on jit ([942c805](https://github.com/folke/lazy.nvim/commit/942c805b8427e3b4b9586e27702eeceacf967549)) + ## [9.11.0](https://github.com/folke/lazy.nvim/compare/v9.10.3...v9.11.0) (2023-03-14) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 84af79f..4a26b0a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -150,7 +150,7 @@ M.defaults = { debug = false, } -M.version = "9.11.0" -- x-release-please-version +M.version = "9.12.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 6b55862d2d264f0b48e0b9e42cc2d14f136bed55 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 15 Mar 2023 15:10:44 +0100 Subject: [PATCH 059/815] refactor(cache): refactor for upstreaming to `vim.loader` --- lua/lazy/core/cache.lua | 215 +++++++++++++++++++++++---------------- lua/lazy/core/loader.lua | 12 ++- lua/lazy/core/util.lua | 8 +- lua/lazy/init.lua | 6 +- 4 files changed, 144 insertions(+), 97 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 7a4c0d7..8f9bb59 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -1,3 +1,13 @@ +---@diagnostic disable: duplicate-doc-alias +---@diagnostic disable: duplicate-doc-field +---@diagnostic disable: duplicate-set-field + +-- interop with the native Neovim loader +if vim.loader then + return vim.loader +end + +-- NEOVIM local uv = vim.loop local M = {} @@ -5,11 +15,17 @@ local M = {} ---@alias CacheHash {mtime: {sec:number, nsec:number}, size:number} ---@alias CacheEntry {hash:CacheHash, chunk:string} ----@class CacheFindOpts +---@class ModuleFindOpts +---@field all? boolean Search for all matches (defaults to `false`) ---@field rtp? boolean Search for modname in the runtime path (defaults to `true`) ---@field patterns? string[] Paterns to use (defaults to `{"/init.lua", ".lua"}`) ---@field paths? string[] Extra paths to search for modname +---@class ModuleInfo +---@field modpath string Path of the module +---@field modname string Name of the module +---@field stat? uv_fs_t File stat of the module path + M.VERSION = 3 M.path = vim.fn.stdpath("cache") .. "/luac" M.enabled = false @@ -18,12 +34,12 @@ M.stats = { find = { total = 0, time = 0, not_found = 0 }, } ----@class ModuleCache +---@class Loader ---@field _rtp string[] ---@field _rtp_pure string[] ---@field _rtp_key string -local Cache = { - ---@type table> +local Loader = { + ---@type table> _indexed = {}, ---@type table _topmods = {}, @@ -39,9 +55,9 @@ function M._track(stat, start) end --- slightly faster/different version than vim.fs.normalize ---- we also need to have it here, since the cache will load vim.fs +--- we also need to have it here, since the loader will load vim.fs ---@private -function Cache.normalize(path) +function Loader.normalize(path) if path:sub(1, 1) == "~" then local home = vim.loop.os_homedir() or "~" if home:sub(-1) == "\\" or home:sub(-1) == "/" then @@ -58,35 +74,35 @@ end --- When called from a fast event, the cached value will be returned. --- @return string[] rtp, boolean updated ---@private -function Cache.get_rtp() +function Loader.get_rtp() local start = uv.hrtime() if vim.in_fast_event() then M._track("get_rtp", start) - return (Cache._rtp or {}), false + return (Loader._rtp or {}), false end local updated = false local key = vim.go.rtp - if key ~= Cache._rtp_key then - Cache._rtp = {} + if key ~= Loader._rtp_key then + Loader._rtp = {} for _, path in ipairs(vim.api.nvim_get_runtime_file("", true)) do - path = Cache.normalize(path) + path = Loader.normalize(path) -- skip after directories - if path:sub(-6, -1) ~= "/after" and not (Cache._indexed[path] and vim.tbl_isempty(Cache._indexed[path])) then - Cache._rtp[#Cache._rtp + 1] = path + if path:sub(-6, -1) ~= "/after" and not (Loader._indexed[path] and vim.tbl_isempty(Loader._indexed[path])) then + Loader._rtp[#Loader._rtp + 1] = path end end updated = true - Cache._rtp_key = key + Loader._rtp_key = key end M._track("get_rtp", start) - return Cache._rtp, updated + return Loader._rtp, updated end --- Returns the cache file name ---@param name string can be a module name, or a file name ---@return string file_name ---@private -function Cache.cache_file(name) +function Loader.cache_file(name) local ret = M.path .. "/" .. name:gsub("[/\\:]", "%%") return ret:sub(-4) == ".lua" and (ret .. "c") or (ret .. ".luac") end @@ -95,8 +111,8 @@ end ---@param name string module name or filename ---@param entry CacheEntry ---@private -function Cache.write(name, entry) - local cname = Cache.cache_file(name) +function Loader.write(name, entry) + local cname = Loader.cache_file(name) local f = assert(uv.fs_open(cname, "w", 438)) local header = { M.VERSION, @@ -113,9 +129,9 @@ end ---@param name string module name or filename ---@return CacheEntry? ---@private -function Cache.read(name) +function Loader.read(name) local start = uv.hrtime() - local cname = Cache.cache_file(name) + local cname = Loader.cache_file(name) local f = uv.fs_open(cname, "r", 438) if f then local hash = uv.fs_fstat(f) --[[@as CacheHash]] @@ -142,11 +158,11 @@ end ---@param modname string module name ---@return string|function ---@private -function Cache.loader(modname) +function Loader.loader(modname) local start = uv.hrtime() - local modpath, hash = M.find(modname) - if modpath then - local chunk, err = M.load(modpath, { hash = hash }) + local ret = M.find(modname)[1] + if ret then + local chunk, err = Loader.load(ret.modpath, { hash = ret.stat }) M._track("loader", start) return chunk or error(err) end @@ -158,12 +174,12 @@ end ---@param modname string module name ---@return string|function ---@private -function Cache.loader_lib(modname) +function Loader.loader_lib(modname) local start = uv.hrtime() local is_win = uv.os_uname().sysname:lower():find("win", 1, true) - local modpath = M.find(modname, { patterns = is_win and { ".dll" } or { ".so" } }) + local ret = M.find(modname, { patterns = is_win and { ".dll" } or { ".so" } })[1] ---@type function?, string? - if modpath then + if ret then -- Making function name in Lua 5.1 (see src/loadlib.c:mkfuncname) is -- a) strip prefix up to and including the first dash, if any -- b) replace all dots by underscores @@ -171,7 +187,7 @@ function Cache.loader_lib(modname) -- So "foo-bar.baz" should result in "luaopen_bar_baz" local dash = modname:find("-", 1, true) local funcname = dash and modname:sub(dash + 1) or modname - local chunk, err = package.loadlib(modpath, "luaopen_" .. funcname:gsub("%.", "_")) + local chunk, err = package.loadlib(ret.modpath, "luaopen_" .. funcname:gsub("%.", "_")) M._track("loader_lib", start) return chunk or error(err) end @@ -183,14 +199,15 @@ end ---@param filename? string ---@param mode? "b"|"t"|"bt" ---@param env? table +---@param hash? CacheHash ---@return function?, string? error_message ---@private -- luacheck: ignore 312 -function Cache.loadfile(filename, mode, env) +function Loader.loadfile(filename, mode, env, hash) local start = uv.hrtime() - filename = Cache.normalize(filename) + filename = Loader.normalize(filename) mode = nil -- ignore mode, since we byte-compile the lua source files - local chunk, err = M.load(filename, { mode = mode, env = env }) + local chunk, err = Loader.load(filename, { mode = mode, env = env, hash = hash }) M._track("loadfile", start) return chunk, err end @@ -202,7 +219,7 @@ end ---@param h1 CacheHash ---@param h2 CacheHash ---@private -function Cache.eq(h1, h2) +function Loader.eq(h1, h2) return h1 and h2 and h1.size == h2.size and h1.mtime.sec == h2.mtime.sec and h1.mtime.nsec == h2.mtime.nsec end @@ -214,7 +231,8 @@ end --- - env: (table) the environment to load the module in. (defaults to `nil`) ---@see |luaL_loadfile()| ---@return function?, string? error_message -function M.load(modpath, opts) +---@private +function Loader.load(modpath, opts) local start = uv.hrtime() opts = opts or {} @@ -224,13 +242,13 @@ function M.load(modpath, opts) if not hash then -- trigger correct error - chunk, err = Cache._loadfile(modpath, opts.mode, opts.env) + chunk, err = Loader._loadfile(modpath, opts.mode, opts.env) M._track("load", start) return chunk, err end - local entry = Cache.read(modpath) - if entry and Cache.eq(entry.hash, hash) then + local entry = Loader.read(modpath) + if entry and Loader.eq(entry.hash, hash) then -- found in cache and up to date -- selene: allow(incorrect_standard_library_use) chunk, err = load(entry.chunk --[[@as string]], "@" .. modpath, opts.mode, opts.env) @@ -241,22 +259,26 @@ function M.load(modpath, opts) end entry = { hash = hash, modpath = modpath } - chunk, err = Cache._loadfile(modpath, opts.mode, opts.env) + chunk, err = Loader._loadfile(modpath, opts.mode, opts.env) if chunk then entry.chunk = string.dump(chunk) - Cache.write(modpath, entry) + Loader.write(modpath, entry) end M._track("load", start) return chunk, err end ---- Finds the module path for the given module name ----@param modname string ----@param opts? CacheFindOpts (table|nil) Options for finding a module: +--- Finds lua modules for the given module name. +---@param modname string Module name, or `"*"` to find the top-level modules instead +---@param opts? ModuleFindOpts (table|nil) Options for finding a module: --- - rtp: (boolean) Search for modname in the runtime path (defaults to `true`) ---- - patterns: (string[]) Paterns to use (defaults to `{"/init.lua", ".lua"}`) --- - paths: (string[]) Extra paths to search for modname (defaults to `{}`) ----@return string? modpath, CacheHash? hash (string|nil) modpath for the module +--- - patterns: (string[]) Paterns to use (defaults to `{"/init.lua", ".lua"}`) +-- - all: (boolean) Return all matches instead of just the first one (defaults to `false`) +---@return ModuleInfo[] (list) A list of results with the following properties: +--- - modpath: (string) the path to the module +--- - modname: (string) the name of the module +--- - stat: (table|nil) the fs_stat of the module path. Won't be returned for `modname="*"` function M.find(modname, opts) local start = uv.hrtime() opts = opts or {} @@ -282,65 +304,85 @@ function M.find(modname, opts) patterns[p] = "/lua/" .. basename .. pattern end + ---@type ModuleInfo[] + local results = {} + + -- Only continue if we haven't found anything yet or we want to find all + ---@private + local function continue() + return #results == 0 or opts.all + end + -- Checks if the given paths contain the top-level module. -- If so, it tries to find the module path for the given module name. ---@param paths string[] - ---@return string? modpath, CacheHash? hash ---@private local function _find(paths) for _, path in ipairs(paths) do - if M.lsmod(path)[topmod] then + if topmod == "*" then + for _, r in pairs(Loader.lsmod(path)) do + results[#results + 1] = r + if not continue() then + return + end + end + elseif Loader.lsmod(path)[topmod] then for _, pattern in ipairs(patterns) do local modpath = path .. pattern M.stats.find.stat = (M.stats.find.stat or 0) + 1 local hash = uv.fs_stat(modpath) if hash then - return modpath, hash + results[#results + 1] = { modpath = modpath, stat = hash, modname = modname } + if not continue() then + return + end end end end end end - ---@type string?, CacheHash? - local modpath, hash - -- always check the rtp first if opts.rtp ~= false then - modpath, hash = _find(Cache._rtp or {}) - if not modpath then - local rtp, updated = Cache.get_rtp() + _find(Loader._rtp or {}) + if continue() then + local rtp, updated = Loader.get_rtp() if updated then - modpath, hash = _find(rtp) + _find(rtp) end end end -- check any additional paths - if (not modpath) and opts.paths then - modpath, hash = _find(opts.paths) + if continue() and opts.paths then + _find(opts.paths) end M._track("find", start) - if modpath then - return modpath, hash + if #results == 0 then + -- module not found + M.stats.find.not_found = M.stats.find.not_found + 1 end - -- module not found - M.stats.find.not_found = M.stats.find.not_found + 1 + return results end ---- Resets the topmods cache for the path ----@param path string path to reset +--- Resets the topmods cache for the path, or all the paths +--- if path is nil. +---@param path string? path to reset function M.reset(path) - Cache._indexed[Cache.normalize(path)] = nil + if path then + Loader._indexed[Loader.normalize(path)] = nil + else + Loader._indexed = {} + end end ---- Enables the cache: ---- * override loadfile ---- * adds the lua loader +--- Enables the experimental Lua module loader: +--- * overrides loadfile +--- * adds the lua loader using the byte-compilation cache --- * adds the libs loader ---- * remove the Neovim loader +--- * removes the default Neovim loader function M.enable() if M.enabled then return @@ -348,11 +390,11 @@ function M.enable() M.enabled = true vim.fn.mkdir(vim.fn.fnamemodify(M.path, ":p"), "p") -- selene: allow(global_usage) - _G.loadfile = Cache.loadfile + _G.loadfile = Loader.loadfile -- add lua loader - table.insert(package.loaders, 2, Cache.loader) + table.insert(package.loaders, 2, Loader.loader) -- add libs loader - table.insert(package.loaders, 3, Cache.loader_lib) + table.insert(package.loaders, 3, Loader.loader_lib) -- remove Neovim loader for l, loader in ipairs(package.loaders) do if loader == vim._load_package then @@ -375,19 +417,19 @@ function M.enable() }) end ---- Disables the cache: ---- * removes the cache loaders ---- * adds the Neovim loader +--- Disables the experimental Lua module loader: +--- * removes the loaders +--- * adds the default Neovim loader function M.disable() if not M.enabled then return end M.enabled = false -- selene: allow(global_usage) - _G.loadfile = Cache._loadfile + _G.loadfile = Loader._loadfile ---@diagnostic disable-next-line: no-unknown for l, loader in ipairs(package.loaders) do - if loader == Cache.loader or loader == Cache.loader_lib then + if loader == Loader.loader or loader == Loader.loader_lib then table.remove(package.loaders, l) end end @@ -397,19 +439,20 @@ end --- Return the top-level `/lua/*` modules for this path ---@param path string path to check for top-level lua modules ----@return string[] -function M.lsmod(path) - if not Cache._indexed[path] then +---@private +function Loader.lsmod(path) + if not Loader._indexed[path] then local start = uv.hrtime() - Cache._indexed[path] = {} + Loader._indexed[path] = {} local handle = vim.loop.fs_scandir(path .. "/lua") while handle do local name, t = vim.loop.fs_scandir_next(handle) if not name then break end + local modpath = path .. "/lua/" .. name -- HACK: type is not always returned due to a bug in luv - t = t or uv.fs_stat(path .. "/lua/" .. name).type + t = t or uv.fs_stat(modpath).type ---@type string local topname local ext = name:sub(-4) @@ -421,19 +464,20 @@ function M.lsmod(path) topname = name end if topname then - Cache._indexed[path][topname] = true - Cache._topmods[topname] = Cache._topmods[topname] or {} - if not vim.tbl_contains(Cache._topmods[topname], path) then - table.insert(Cache._topmods[topname], path) + Loader._indexed[path][topname] = { modpath = modpath, modname = topname } + Loader._topmods[topname] = Loader._topmods[topname] or {} + if not vim.tbl_contains(Loader._topmods[topname], path) then + table.insert(Loader._topmods[topname], path) end end end M._track("lsmod", start) end - return Cache._indexed[path] + return Loader._indexed[path] end --- Debug function that wrapps all loaders and tracks stats +---@private function M.profile_loaders() for l, loader in pairs(package.loaders) do local loc = debug.getinfo(loader, "Sn").source:sub(2) @@ -448,6 +492,7 @@ function M.profile_loaders() end --- Prints all cache stats +---@private function M.inspect() ---@private local function ms(nsec) @@ -477,6 +522,6 @@ function M.inspect() vim.api.nvim_echo(chunks, true, {}) end -M._Cache = Cache +M._Cache = Loader return M diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 85954f6..6e3b653 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -346,7 +346,8 @@ function M.get_main(plugin) local normname = Util.normname(plugin.name) ---@type string[] local mods = {} - for modname, _ in pairs(Cache.lsmod(plugin.dir)) do + for _, mod in ipairs(Cache.find("*", { all = true, rtp = false, paths = { plugin.dir } })) do + local modname = mod.modname mods[#mods + 1] = modname local modnorm = Util.normname(modname) -- if we found an exact match, then use that @@ -476,16 +477,17 @@ end ---@param modname string function M.loader(modname) local paths = Util.get_unloaded_rtp(modname) - local modpath, hash = Cache.find(modname, { rtp = false, paths = paths }) - if modpath then - M.auto_load(modname, modpath) + local ret = Cache.find(modname, { rtp = false, paths = paths })[1] + if ret then + M.auto_load(modname, ret.modpath) local mod = package.loaded[modname] if type(mod) == "table" then return function() return mod end end - return Cache.load(modpath, { hash = hash }) + -- selene: allow(incorrect_standard_library_use) + return loadfile(ret.modpath, nil, nil, ret.stat) end end diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 10c5c0a..3e0042e 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -241,13 +241,13 @@ function M.get_unloaded_rtp(modname) end function M.find_root(modname) - local modpath = require("lazy.core.cache").find(modname, { + local ret = require("lazy.core.cache").find(modname, { rtp = true, paths = M.get_unloaded_rtp(modname), patterns = { "", ".lua" }, - }) - if modpath then - local root = modpath:gsub("/init%.lua$", ""):gsub("%.lua$", "") + })[1] + if ret then + local root = ret.modpath:gsub("/init%.lua$", ""):gsub("%.lua$", "") return root end end diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index 14a8de5..2f015b6 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -33,9 +33,9 @@ function M.setup(spec, opts) end local start = vim.loop.hrtime() - -- disable the Neovim cache if it would ever be added - if vim.cache and vim.cache.disable then - vim.cache.disable() + -- use the NEovim cache if available + if vim.loader then + package.loaded["lazy.core.cache"] = vim.loader end local Cache = require("lazy.core.cache") From 2e3c16e5265050e7b5752df208490deb9a4245ec Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 16 Mar 2023 14:13:18 +0100 Subject: [PATCH 060/815] docs: better comments for Cache.find --- lua/lazy/core/cache.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 8f9bb59..0e6daa2 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -273,7 +273,9 @@ end ---@param opts? ModuleFindOpts (table|nil) Options for finding a module: --- - rtp: (boolean) Search for modname in the runtime path (defaults to `true`) --- - paths: (string[]) Extra paths to search for modname (defaults to `{}`) ---- - patterns: (string[]) Paterns to use (defaults to `{"/init.lua", ".lua"}`) +--- - patterns: (string[]) List of patterns to use when searching for modules. +-- A pattern is a string added to the basename of the Lua module being searched. +-- (defaults to `{"/init.lua", ".lua"}`) -- - all: (boolean) Return all matches instead of just the first one (defaults to `false`) ---@return ModuleInfo[] (list) A list of results with the following properties: --- - modpath: (string) the path to the module From b4b11f48aad26c6ad10d04d8969f234980a87922 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 16 Mar 2023 23:53:36 +0100 Subject: [PATCH 061/815] style: better comments for cache.find --- lua/lazy/core/cache.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 0e6daa2..13770f4 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -274,9 +274,9 @@ end --- - rtp: (boolean) Search for modname in the runtime path (defaults to `true`) --- - paths: (string[]) Extra paths to search for modname (defaults to `{}`) --- - patterns: (string[]) List of patterns to use when searching for modules. --- A pattern is a string added to the basename of the Lua module being searched. --- (defaults to `{"/init.lua", ".lua"}`) --- - all: (boolean) Return all matches instead of just the first one (defaults to `false`) +--- A pattern is a string added to the basename of the Lua module being searched. +--- (defaults to `{"/init.lua", ".lua"}`) +--- - all: (boolean) Return all matches instead of just the first one (defaults to `false`) ---@return ModuleInfo[] (list) A list of results with the following properties: --- - modpath: (string) the path to the module --- - modname: (string) the name of the module From efe36bdfda47256dbc223945a7f35eea52b1d736 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 16 Mar 2023 23:54:09 +0100 Subject: [PATCH 062/815] =?UTF-8?q?fix(cmd):=20properly=20deal=20with=20co?= =?UTF-8?q?mmands=20with=20nargs=3D=3F=20or=20nargs=3D1.=20Fixes=20#659?= --- lua/lazy/core/handler/cmd.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lua/lazy/core/handler/cmd.lua b/lua/lazy/core/handler/cmd.lua index 6ee52ad..86711de 100644 --- a/lua/lazy/core/handler/cmd.lua +++ b/lua/lazy/core/handler/cmd.lua @@ -29,6 +29,13 @@ function M:_add(cmd) end self:_load(cmd) + + local info = vim.api.nvim_get_commands({})[cmd] + command.nargs = info.nargs + if event.args and event.args ~= "" and info.nargs and info.nargs:find("[1?]") then + command.args = { event.args } + end + vim.cmd(command) end, { bang = true, From aacaa600cf1e7e1b1f250f9b138f0ae73168f64b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 16 Mar 2023 22:54:54 +0000 Subject: [PATCH 063/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 5e5fcb0..327fb3d 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 15 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 16 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From e2102c3a3a66ee89a2afaf779e439490eada75e3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 08:16:47 +0100 Subject: [PATCH 064/815] chore(main): release 9.12.1 (#660) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4532af5..935e011 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.12.1](https://github.com/folke/lazy.nvim/compare/v9.12.0...v9.12.1) (2023-03-16) + + +### Bug Fixes + +* **cmd:** properly deal with commands with nargs=? or nargs=1. Fixes [#659](https://github.com/folke/lazy.nvim/issues/659) ([efe36bd](https://github.com/folke/lazy.nvim/commit/efe36bdfda47256dbc223945a7f35eea52b1d736)) + ## [9.12.0](https://github.com/folke/lazy.nvim/compare/v9.11.0...v9.12.0) (2023-03-15) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4a26b0a..db2abd8 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -150,7 +150,7 @@ M.defaults = { debug = false, } -M.version = "9.12.0" -- x-release-please-version +M.version = "9.12.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From b3eca0c3fb4ef5e547f70c571b8cd27688db83bb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 17 Mar 2023 07:17:33 +0000 Subject: [PATCH 065/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 327fb3d..dd9b8ed 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 16 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 17 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From e5759d202afe80aeb192e7eb02d28b74cc2d66eb Mon Sep 17 00:00:00 2001 From: abal Date: Fri, 17 Mar 2023 08:18:02 -0700 Subject: [PATCH 066/815] feat(help): allow disabling README magic (#663) --- README.md | 1 + lua/lazy/core/config.lua | 1 + lua/lazy/help.lua | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 0dfc7c6..7fb8de3 100644 --- a/README.md +++ b/README.md @@ -435,6 +435,7 @@ return { -- so :help works even for plugins that don't have vim docs. -- when the readme opens with :help it will be correctly displayed as markdown readme = { + enabled = true, root = vim.fn.stdpath("state") .. "/lazy/readme", files = { "README.md", "lua/**/README.md" }, -- only generate markdown helptags for plugins that dont have docs diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index db2abd8..bcf1f39 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -141,6 +141,7 @@ M.defaults = { -- so :help works even for plugins that don't have vim docs. -- when the readme opens with :help it will be correctly displayed as markdown readme = { + enabled = true, root = vim.fn.stdpath("state") .. "/lazy/readme", files = { "README.md", "lua/**/README.md" }, -- only generate markdown helptags for plugins that dont have docs diff --git a/lua/lazy/help.lua b/lua/lazy/help.lua index 599e2b4..4a289eb 100644 --- a/lua/lazy/help.lua +++ b/lua/lazy/help.lua @@ -41,6 +41,10 @@ function M.update() if Config.plugins["lazy.nvim"] then vim.cmd.helptags(Config.plugins["lazy.nvim"].dir .. "/doc") end + if Config.options.readme.enabled == false then + return + end + local docs = Config.options.readme.root .. "/doc" vim.fn.mkdir(docs, "p") From 357893a2880abecfc8704ef8874620b088189531 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 17 Mar 2023 15:18:52 +0000 Subject: [PATCH 067/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index dd9b8ed..8fbaaeb 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -528,6 +528,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* -- so :help works even for plugins that don't have vim docs. -- when the readme opens with :help it will be correctly displayed as markdown readme = { + enabled = true, root = vim.fn.stdpath("state") .. "/lazy/readme", files = { "README.md", "lua//README.md" }, -- only generate markdown helptags for plugins that dont have docs From fdb41229ca39cf2795cbf4e6d04a52b73e6225f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Mar 2023 16:44:19 +0100 Subject: [PATCH 068/815] chore(main): release 9.13.0 (#664) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 935e011..dfa76aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.13.0](https://github.com/folke/lazy.nvim/compare/v9.12.1...v9.13.0) (2023-03-17) + + +### Features + +* **help:** allow disabling README magic ([#663](https://github.com/folke/lazy.nvim/issues/663)) ([e5759d2](https://github.com/folke/lazy.nvim/commit/e5759d202afe80aeb192e7eb02d28b74cc2d66eb)) + ## [9.12.1](https://github.com/folke/lazy.nvim/compare/v9.12.0...v9.12.1) (2023-03-16) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index bcf1f39..8cf0903 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.12.1" -- x-release-please-version +M.version = "9.13.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 959f8c36bc1744db2745b18135f2fb822b382cfb Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 18 Mar 2023 08:36:01 +0100 Subject: [PATCH 069/815] fix(health): allow overriding `1` --- lua/lazy/health.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index c982a37..f8e691e 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -84,7 +84,7 @@ function M.check_override(plugin) end local Handler = require("lazy.core.handler") - local skip = { "dependencies", "_", "opts" } + local skip = { "dependencies", "_", "opts", 1 } vim.list_extend(skip, vim.tbl_values(Handler.types)) for key, value in pairs(plugin._.super) do From 7d81994529b820ffb7b272a82898f1334271ee67 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 18 Mar 2023 07:36:54 +0000 Subject: [PATCH 070/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 8fbaaeb..9da6e82 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 17 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 18 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 37541e57e42da6001f698e3f01aaa6615070730e Mon Sep 17 00:00:00 2001 From: Will Norris Date: Sat, 18 Mar 2023 00:38:31 -0700 Subject: [PATCH 071/815] docs(plugins): add example of multiple imports (#669) --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 7fb8de3..064e710 100644 --- a/README.md +++ b/README.md @@ -677,6 +677,18 @@ require("lazy").setup("plugins") require("lazy").setup({{import = "plugins"}}) ``` +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +```lua +require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } +) +``` + When you import specs, you can override them by simply adding a spec for the same plugin to your local specs, adding any keys you want to override / merge. From f4d53dc18af4631a787eb72497a97afc2de8625f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 18 Mar 2023 07:39:22 +0000 Subject: [PATCH 072/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 9da6e82..5c36a3b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -789,6 +789,18 @@ modules. Both of the `setup()` calls are equivalent: require("lazy").setup({{import = "plugins"}}) < +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + ) +< + When you import specs, you can override them by simply adding a spec for the same plugin to your local specs, adding any keys you want to override / merge. From 67cc8dc07ca2372922ffd5e5cf05f92872adacf7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 18 Mar 2023 08:57:20 +0100 Subject: [PATCH 073/815] docs: updated docs. Fixes #667 --- README.md | 100 ++++++++++++++++++++----------------------- lua/lazy/example.lua | 45 ++++++++----------- 2 files changed, 66 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index 064e710..7292e4a 100644 --- a/README.md +++ b/README.md @@ -79,33 +79,34 @@ 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 | -| **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` | -| **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 included in the spec | -| **cond** | `boolean?` or `fun(LazyPlugin):boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | -| **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | -| **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | -| **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | -| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require("plugin").setup(opts)`. `"plugin"` will default to `name` if specified, otherwise `lazy.nvim` will do its best to guess the correct plugin name. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | -| **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 | -| **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 | -| `submodules` | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | -| **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | -| **cmd** | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]` | Lazy-load on command | -| **ft** | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]` | Lazy-load on filetype | -| **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | -| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | -| **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | +| 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 | +| **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` | +| **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 included in the spec | +| **cond** | `boolean?` or `fun(LazyPlugin):boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | +| **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | +| **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | +| **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | +| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)`. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | +| **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | +| **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 | +| **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 | +| `submodules` | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | +| **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | +| **cmd** | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]` | Lazy-load on command | +| **ft** | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]` | Lazy-load on filetype | +| **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | +| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | +| **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | ### Lazy Loading @@ -213,30 +214,22 @@ return { "nvim-neorg/neorg", -- lazy-load on filetype ft = "norg", - -- custom config that will be executed when loading the plugin - config = function() - require("neorg").setup() - end, - }, - - -- the above could also be written as: - { - "nvim-neorg/neorg", - ft = "norg", - config = true, -- run require("neorg").setup() - }, - - -- or set custom options: - { - "nvim-neorg/neorg", - ft = "norg", - opts = { foo = "bar" }, -- run require("neorg").setup({foo = "bar"}) + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, }, { "dstein64/vim-startuptime", -- lazy-load on a command cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, }, { @@ -254,19 +247,20 @@ return { end, }, + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + -- you can use the VeryLazy event for things that can -- load later and are not important for the initial UI { "stevearc/dressing.nvim", event = "VeryLazy" }, { - "cshuaimin/ssr.nvim", - -- init is always executed during startup, but doesn't load the plugin yet. - init = function() - vim.keymap.set({ "n", "x" }, "cR", function() - -- this require will automatically load the plugin - require("ssr").open() - end, { desc = "Structural Replace" }) - end, + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, }, { diff --git a/lua/lazy/example.lua b/lua/lazy/example.lua index 18c1ca9..df52faf 100644 --- a/lua/lazy/example.lua +++ b/lua/lazy/example.lua @@ -18,30 +18,22 @@ return { "nvim-neorg/neorg", -- lazy-load on filetype ft = "norg", - -- custom config that will be executed when loading the plugin - config = function() - require("neorg").setup() - end, - }, - - -- the above could also be written as: - { - "nvim-neorg/neorg", - ft = "norg", - config = true, -- run require("neorg").setup() - }, - - -- or set custom options: - { - "nvim-neorg/neorg", - ft = "norg", - opts = { foo = "bar" }, -- run require("neorg").setup({foo = "bar"}) + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, }, { "dstein64/vim-startuptime", -- lazy-load on a command cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, }, { @@ -59,19 +51,20 @@ return { end, }, + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + -- you can use the VeryLazy event for things that can -- load later and are not important for the initial UI { "stevearc/dressing.nvim", event = "VeryLazy" }, { - "cshuaimin/ssr.nvim", - -- init is always executed during startup, but doesn't load the plugin yet. - init = function() - vim.keymap.set({ "n", "x" }, "cR", function() - -- this require will automatically load the plugin - require("ssr").open() - end, { desc = "Structural Replace" }) - end, + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, }, { From 8456a867f79e3fb3b5390659c5d11a1e35793372 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 18 Mar 2023 07:58:04 +0000 Subject: [PATCH 074/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 55 ++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 5c36a3b..6bb0db9 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -149,12 +149,16 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The default implementation will automatically run - require("plugin").setup(opts). "plugin" will default - to name if specified, otherwise lazy.nvim will do - its best to guess the correct plugin name. See also + require(MAIN).setup(opts). Lazy uses several + heuristics to determine the plugin’s MAIN module + automatically based on the plugin’s name. See also opts. To use the default implementation without opts set config to true. + main string? You can specify the main module to use for config() + and opts(), in case it can not be determined + automatically. See config() + 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. @@ -309,30 +313,22 @@ EXAMPLES ~ "nvim-neorg/neorg", -- lazy-load on filetype ft = "norg", - -- custom config that will be executed when loading the plugin - config = function() - require("neorg").setup() - end, - }, - - -- the above could also be written as: - { - "nvim-neorg/neorg", - ft = "norg", - config = true, -- run require("neorg").setup() - }, - - -- or set custom options: - { - "nvim-neorg/neorg", - ft = "norg", - opts = { foo = "bar" }, -- run require("neorg").setup({foo = "bar"}) + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, }, { "dstein64/vim-startuptime", -- lazy-load on a command cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, }, { @@ -350,19 +346,20 @@ EXAMPLES ~ end, }, + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + -- you can use the VeryLazy event for things that can -- load later and are not important for the initial UI { "stevearc/dressing.nvim", event = "VeryLazy" }, { - "cshuaimin/ssr.nvim", - -- init is always executed during startup, but doesn't load the plugin yet. - init = function() - vim.keymap.set({ "n", "x" }, "cR", function() - -- this require will automatically load the plugin - require("ssr").open() - end, { desc = "Structural Replace" }) - end, + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, }, { From 29b3bf9535f83bb774df81e3cc0381cc9c2934ed Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 19 Mar 2023 20:57:12 +0100 Subject: [PATCH 075/815] ci: update templates --- .github/workflows/ci.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 94b6d15..1e290ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,8 +15,12 @@ jobs: - name: Install Neovim shell: bash run: | - wget -q https://github.com/neovim/neovim/releases/download/nightly/nvim-linux64.deb -O /tmp/nvim.deb - sudo dpkg -i /tmp/nvim.deb + mkdir -p /tmp/nvim + wget -q https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage -O /tmp/nvim/nvim.appimage + cd /tmp/nvim + chmod a+x ./nvim.appimage + ./nvim.appimage --appimage-extract + echo "/tmp/nvim/squashfs-root/usr/bin/" >> $GITHUB_PATH - name: Run Tests run: | nvim --version From b306eb3d0f32b792929735c6d528c38d0f1dc0cd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 19 Mar 2023 19:58:05 +0000 Subject: [PATCH 076/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 6bb0db9..a1e9390 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 18 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 19 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 236f8517bae70516a3f89fe154e3e18294eb862a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 20 Mar 2023 08:01:30 +0100 Subject: [PATCH 077/815] fix(cache): fix loading libs on Darwin --- lua/lazy/core/cache.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 13770f4..619c746 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -176,7 +176,8 @@ end ---@private function Loader.loader_lib(modname) local start = uv.hrtime() - local is_win = uv.os_uname().sysname:lower():find("win", 1, true) + local sysname = uv.os_uname().sysname:lower() or "" + local is_win = sysname:find("win", 1, true) and not sysname:find("darwin", 1, true) local ret = M.find(modname, { patterns = is_win and { ".dll" } or { ".so" } })[1] ---@type function?, string? if ret then From c9aeaae6999f702afee24375600fe1d189d6d51c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 20 Mar 2023 07:02:15 +0000 Subject: [PATCH 078/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index a1e9390..be37db2 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 19 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 20 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From e7622b78f6addaeb93debf43041235c16fc74a57 Mon Sep 17 00:00:00 2001 From: Andy Dirnberger Date: Mon, 20 Mar 2023 03:02:24 -0400 Subject: [PATCH 079/815] fix(health): add `main` key (#679) --- lua/lazy/health.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index f8e691e..83096c0 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -114,6 +114,7 @@ M.valid = { "init", "keys", "lazy", + "main", "module", "name", "opts", From 887eb75591520a01548134c4623617b639289d0b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 20 Mar 2023 08:06:14 +0100 Subject: [PATCH 080/815] chore(main): release 9.13.1 (#671) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 9 +++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dfa76aa..493b7a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## [9.13.1](https://github.com/folke/lazy.nvim/compare/v9.13.0...v9.13.1) (2023-03-20) + + +### Bug Fixes + +* **cache:** fix loading libs on Darwin ([236f851](https://github.com/folke/lazy.nvim/commit/236f8517bae70516a3f89fe154e3e18294eb862a)) +* **health:** add `main` key ([#679](https://github.com/folke/lazy.nvim/issues/679)) ([e7622b7](https://github.com/folke/lazy.nvim/commit/e7622b78f6addaeb93debf43041235c16fc74a57)) +* **health:** allow overriding `1` ([959f8c3](https://github.com/folke/lazy.nvim/commit/959f8c36bc1744db2745b18135f2fb822b382cfb)) + ## [9.13.0](https://github.com/folke/lazy.nvim/compare/v9.12.1...v9.13.0) (2023-03-17) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 8cf0903..4185c4e 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.13.0" -- x-release-please-version +M.version = "9.13.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 690f9e88e2a7dc92bcb0cca85f778a3e99fe1f7e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 20 Mar 2023 16:42:11 +0100 Subject: [PATCH 081/815] refactor: prepping for vim.loader --- lua/lazy/core/cache.lua | 117 ++++++++++++++++++++------------------- lua/lazy/view/render.lua | 2 +- 2 files changed, 62 insertions(+), 57 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 619c746..e988dae 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -26,32 +26,34 @@ local M = {} ---@field modname string Name of the module ---@field stat? uv_fs_t File stat of the module path -M.VERSION = 3 +---@alias LoaderStats table + M.path = vim.fn.stdpath("cache") .. "/luac" M.enabled = false ----@type table -M.stats = { - find = { total = 0, time = 0, not_found = 0 }, -} ---@class Loader ---@field _rtp string[] ---@field _rtp_pure string[] ---@field _rtp_key string local Loader = { + VERSION = 3, ---@type table> _indexed = {}, ---@type table _topmods = {}, _loadfile = loadfile, + ---@type LoaderStats + _stats = { + find = { total = 0, time = 0, not_found = 0 }, + }, } --- Tracks the time spent in a function ---@private -function M._track(stat, start) - M.stats[stat] = M.stats[stat] or { total = 0, time = 0 } - M.stats[stat].total = M.stats[stat].total + 1 - M.stats[stat].time = M.stats[stat].time + uv.hrtime() - start +function Loader.track(stat, start) + Loader._stats[stat] = Loader._stats[stat] or { total = 0, time = 0 } + Loader._stats[stat].total = Loader._stats[stat].total + 1 + Loader._stats[stat].time = Loader._stats[stat].time + uv.hrtime() - start end --- slightly faster/different version than vim.fs.normalize @@ -77,7 +79,7 @@ end function Loader.get_rtp() local start = uv.hrtime() if vim.in_fast_event() then - M._track("get_rtp", start) + Loader.track("get_rtp", start) return (Loader._rtp or {}), false end local updated = false @@ -94,7 +96,7 @@ function Loader.get_rtp() updated = true Loader._rtp_key = key end - M._track("get_rtp", start) + Loader.track("get_rtp", start) return Loader._rtp, updated end @@ -115,7 +117,7 @@ function Loader.write(name, entry) local cname = Loader.cache_file(name) local f = assert(uv.fs_open(cname, "w", 438)) local header = { - M.VERSION, + Loader.VERSION, entry.hash.size, entry.hash.mtime.sec, entry.hash.mtime.nsec, @@ -142,16 +144,16 @@ function Loader.read(name) ---@type integer[]|{[0]:integer} local header = vim.split(data:sub(1, zero - 1), ",") - if tonumber(header[1]) ~= M.VERSION then + if tonumber(header[1]) ~= Loader.VERSION then return end - M._track("read", start) + Loader.track("read", start) return { hash = { size = tonumber(header[2]), mtime = { sec = tonumber(header[3]), nsec = tonumber(header[4]) } }, chunk = data:sub(zero + 1), } end - M._track("read", start) + Loader.track("read", start) end --- The `package.loaders` loader for lua files using the cache. @@ -163,10 +165,10 @@ function Loader.loader(modname) local ret = M.find(modname)[1] if ret then local chunk, err = Loader.load(ret.modpath, { hash = ret.stat }) - M._track("loader", start) + Loader.track("loader", start) return chunk or error(err) end - M._track("loader", start) + Loader.track("loader", start) return "\ncache_loader: module " .. modname .. " not found" end @@ -189,10 +191,10 @@ function Loader.loader_lib(modname) local dash = modname:find("-", 1, true) local funcname = dash and modname:sub(dash + 1) or modname local chunk, err = package.loadlib(ret.modpath, "luaopen_" .. funcname:gsub("%.", "_")) - M._track("loader_lib", start) + Loader.track("loader_lib", start) return chunk or error(err) end - M._track("loader_lib", start) + Loader.track("loader_lib", start) return "\ncache_loader_lib: module " .. modname .. " not found" end @@ -209,7 +211,7 @@ function Loader.loadfile(filename, mode, env, hash) filename = Loader.normalize(filename) mode = nil -- ignore mode, since we byte-compile the lua source files local chunk, err = Loader.load(filename, { mode = mode, env = env, hash = hash }) - M._track("loadfile", start) + Loader.track("loadfile", start) return chunk, err end @@ -244,7 +246,7 @@ function Loader.load(modpath, opts) if not hash then -- trigger correct error chunk, err = Loader._loadfile(modpath, opts.mode, opts.env) - M._track("load", start) + Loader.track("load", start) return chunk, err end @@ -254,7 +256,7 @@ function Loader.load(modpath, opts) -- selene: allow(incorrect_standard_library_use) chunk, err = load(entry.chunk --[[@as string]], "@" .. modpath, opts.mode, opts.env) if not (err and err:find("cannot load incompatible bytecode", 1, true)) then - M._track("load", start) + Loader.track("load", start) return chunk, err end end @@ -265,7 +267,7 @@ function Loader.load(modpath, opts) entry.chunk = string.dump(chunk) Loader.write(modpath, entry) end - M._track("load", start) + Loader.track("load", start) return chunk, err end @@ -332,7 +334,7 @@ function M.find(modname, opts) elseif Loader.lsmod(path)[topmod] then for _, pattern in ipairs(patterns) do local modpath = path .. pattern - M.stats.find.stat = (M.stats.find.stat or 0) + 1 + Loader._stats.find.stat = (Loader._stats.find.stat or 0) + 1 local hash = uv.fs_stat(modpath) if hash then results[#results + 1] = { modpath = modpath, stat = hash, modname = modname } @@ -361,10 +363,10 @@ function M.find(modname, opts) _find(opts.paths) end - M._track("find", start) + Loader.track("find", start) if #results == 0 then -- module not found - M.stats.find.not_found = M.stats.find.not_found + 1 + Loader._stats.find.not_found = Loader._stats.find.not_found + 1 end return results @@ -474,57 +476,60 @@ function Loader.lsmod(path) end end end - M._track("lsmod", start) + Loader.track("lsmod", start) end return Loader._indexed[path] end --- Debug function that wrapps all loaders and tracks stats ---@private -function M.profile_loaders() +function M._profile_loaders() for l, loader in pairs(package.loaders) do local loc = debug.getinfo(loader, "Sn").source:sub(2) package.loaders[l] = function(modname) local start = vim.loop.hrtime() local ret = loader(modname) - M._track("loader " .. l .. ": " .. loc, start) - M._track("loader_all", start) + Loader.track("loader " .. l .. ": " .. loc, start) + Loader.track("loader_all", start) return ret end end end --- Prints all cache stats +---@param opts? {print?:boolean} +---@return LoaderStats ---@private -function M.inspect() - ---@private - local function ms(nsec) - return math.floor(nsec / 1e6 * 1000 + 0.5) / 1000 .. "ms" - end - local chunks = {} ---@type string[][] - ---@type string[] - local stats = vim.tbl_keys(M.stats) - table.sort(stats) - for _, stat in ipairs(stats) do - vim.list_extend(chunks, { - { "\n" .. stat .. "\n", "Title" }, - { "* total: " }, - { tostring(M.stats[stat].total) .. "\n", "Number" }, - { "* time: " }, - { ms(M.stats[stat].time) .. "\n", "Bold" }, - { "* avg time: " }, - { ms(M.stats[stat].time / M.stats[stat].total) .. "\n", "Bold" }, - }) - for k, v in pairs(M.stats[stat]) do - if not vim.tbl_contains({ "time", "total" }, k) then - chunks[#chunks + 1] = { "* " .. k .. ":" .. string.rep(" ", 9 - #k) } - chunks[#chunks + 1] = { tostring(v) .. "\n", "Number" } +function M._inspect(opts) + if opts and opts.print then + ---@private + local function ms(nsec) + return math.floor(nsec / 1e6 * 1000 + 0.5) / 1000 .. "ms" + end + local chunks = {} ---@type string[][] + ---@type string[] + local stats = vim.tbl_keys(Loader._stats) + table.sort(stats) + for _, stat in ipairs(stats) do + vim.list_extend(chunks, { + { "\n" .. stat .. "\n", "Title" }, + { "* total: " }, + { tostring(Loader._stats[stat].total) .. "\n", "Number" }, + { "* time: " }, + { ms(Loader._stats[stat].time) .. "\n", "Bold" }, + { "* avg time: " }, + { ms(Loader._stats[stat].time / Loader._stats[stat].total) .. "\n", "Bold" }, + }) + for k, v in pairs(Loader._stats[stat]) do + if not vim.tbl_contains({ "time", "total" }, k) then + chunks[#chunks + 1] = { "* " .. k .. ":" .. string.rep(" ", 9 - #k) } + chunks[#chunks + 1] = { tostring(v) .. "\n", "Number" } + end end end + vim.api.nvim_echo(chunks, true, {}) end - vim.api.nvim_echo(chunks, true, {}) + return Loader._stats end -M._Cache = Loader - return M diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 0a1cd80..0ff335a 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -675,7 +675,7 @@ function M:debug() end) self:nl() - Util.foreach(require("lazy.core.cache").stats, function(name, stats) + Util.foreach(require("lazy.core.cache")._inspect(), function(name, stats) self:append(name, "LazyH2"):nl() local props = { { "total", stats.total or 0, "Number" }, From 261c2d6f95f1e71480c0a573275bbe4fb2c705a2 Mon Sep 17 00:00:00 2001 From: luozhiya Date: Wed, 22 Mar 2023 16:04:36 +0800 Subject: [PATCH 082/815] fix(ui): show full reason for Not-Loaded (#683) no print --- lua/lazy/view/render.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 0ff335a..91b8756 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -401,9 +401,11 @@ function M:plugin(plugin) local reason = {} for handler in pairs(Handler.types) do if plugin[handler] then + local trigger = {} for _, value in ipairs(plugin[handler]) do - reason[handler] = value + table.insert(trigger, type(value) == 'table' and value[1] or value) end + reason[handler] = table.concat(trigger, ' ') end end for _, other in pairs(Config.plugins) do From 4cdc8aa8dbcfee5d7cef1dcbf5159af50214f005 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 22 Mar 2023 08:05:22 +0000 Subject: [PATCH 083/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index be37db2..bbb935a 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 20 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 22 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 0e230caab9466ae352e9aaa6a4327ebd3e72302a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 22 Mar 2023 16:06:27 +0100 Subject: [PATCH 084/815] feat(ui): added test to dimmed commits --- lua/lazy/view/config.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/config.lua b/lua/lazy/view/config.lua index 6c73d40..0e7dbf6 100644 --- a/lua/lazy/view/config.lua +++ b/lua/lazy/view/config.lua @@ -24,7 +24,7 @@ function M.get_commands() return ret end -M.dimmed_commits = { "build", "ci", "chore", "doc" } +M.dimmed_commits = { "build", "ci", "chore", "doc", "test" } M.keys = { hover = "K", From be77c59bf742379b6c5ad1e70d29c5fc1ee55944 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 08:12:43 +0100 Subject: [PATCH 085/815] chore(main): release 9.14.0 (#684) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 493b7a0..238610f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [9.14.0](https://github.com/folke/lazy.nvim/compare/v9.13.1...v9.14.0) (2023-03-22) + + +### Features + +* **ui:** added test to dimmed commits ([0e230ca](https://github.com/folke/lazy.nvim/commit/0e230caab9466ae352e9aaa6a4327ebd3e72302a)) + + +### Bug Fixes + +* **ui:** show full reason for Not-Loaded ([#683](https://github.com/folke/lazy.nvim/issues/683)) ([261c2d6](https://github.com/folke/lazy.nvim/commit/261c2d6f95f1e71480c0a573275bbe4fb2c705a2)) + ## [9.13.1](https://github.com/folke/lazy.nvim/compare/v9.13.0...v9.13.1) (2023-03-20) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4185c4e..d24ce8f 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.13.1" -- x-release-please-version +M.version = "9.14.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From a80422f21750fcbf0e90b26da877d4024d76f116 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 23 Mar 2023 07:13:26 +0000 Subject: [PATCH 086/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index bbb935a..c0d078c 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 22 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 23 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From db5b67e75c31c955e3df9a3d6781f397b9dc66e8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 24 Mar 2023 21:22:13 +0100 Subject: [PATCH 087/815] fix(cache): handle corrupted cache files --- lua/lazy/core/cache.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index e988dae..d60d271 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -141,6 +141,9 @@ function Loader.read(name) uv.fs_close(f) local zero = data:find("\0", 1, true) + if not zero then + return + end ---@type integer[]|{[0]:integer} local header = vim.split(data:sub(1, zero - 1), ",") From 983aad3e79e6f7e3a65e1869d4116d627a9eaf28 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 24 Mar 2023 20:23:03 +0000 Subject: [PATCH 088/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c0d078c..47e12e3 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 23 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 24 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 32d5f4af2fdc0c04d60e3d5b5da3fc19a2c3699e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 24 Mar 2023 23:08:27 +0100 Subject: [PATCH 089/815] chore(main): release 9.14.1 (#691) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 238610f..038381d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.1](https://github.com/folke/lazy.nvim/compare/v9.14.0...v9.14.1) (2023-03-24) + + +### Bug Fixes + +* **cache:** handle corrupted cache files ([db5b67e](https://github.com/folke/lazy.nvim/commit/db5b67e75c31c955e3df9a3d6781f397b9dc66e8)) + ## [9.14.0](https://github.com/folke/lazy.nvim/compare/v9.13.1...v9.14.0) (2023-03-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index d24ce8f..d80d1c1 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.0" -- x-release-please-version +M.version = "9.14.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 9f9d733df9644106c258709e1c910d4034bf06ce Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 25 Mar 2023 09:56:10 +0100 Subject: [PATCH 090/815] fix(keys): dont add (n) to keys id --- lua/lazy/core/handler/keys.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 91ece7a..73b10b7 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -25,8 +25,9 @@ function M.parse(value) if type(mode) == "table" then ---@cast mode string[] table.sort(mode) - ret.id = ret.id .. " (" .. table.concat(mode, ", ") .. ")" - elseif mode ~= "n" then + mode = table.concat(mode, ", ") + end + if mode ~= "n" then ret.id = ret.id .. " (" .. mode .. ")" end end From 37c0aef4e36045ef344d69871f059f3672e69a5b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 25 Mar 2023 08:56:55 +0000 Subject: [PATCH 091/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 47e12e3..7653924 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 24 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 25 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 57cce98dfdb2f2dd05a0567d89811e6d0505e13b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 25 Mar 2023 09:58:08 +0100 Subject: [PATCH 092/815] chore(main): release 9.14.2 (#693) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 038381d..abf9bf6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.2](https://github.com/folke/lazy.nvim/compare/v9.14.1...v9.14.2) (2023-03-25) + + +### Bug Fixes + +* **keys:** dont add (n) to keys id ([9f9d733](https://github.com/folke/lazy.nvim/commit/9f9d733df9644106c258709e1c910d4034bf06ce)) + ## [9.14.1](https://github.com/folke/lazy.nvim/compare/v9.14.0...v9.14.1) (2023-03-24) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index d80d1c1..dc922e7 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.1" -- x-release-please-version +M.version = "9.14.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From b7a1a0fbaf1bd0f394783951f16d4c9f8c9dc210 Mon Sep 17 00:00:00 2001 From: futsuuu <105504350+futsuuu@users.noreply.github.com> Date: Sun, 16 Apr 2023 05:54:10 +0900 Subject: [PATCH 093/815] fix(render): show message if not yet committed (#707) * fix(render): show message if not yet committed * fix(render): show commit only if it can be shown --- lua/lazy/view/render.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 91b8756..36e1f96 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -499,7 +499,9 @@ function M:details(plugin) if git.branch then table.insert(props, { "branch", git.branch }) end - table.insert(props, { "commit", git.commit:sub(1, 7), "LazyCommit" }) + if git.commit then + table.insert(props, { "commit", git.commit:sub(1, 7), "LazyCommit" }) + end end if Util.file_exists(plugin.dir .. "/README.md") then table.insert(props, { "readme", "README.md" }) From 3c14a0a279d160a9fdfec5efc7e5e92226d08970 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 16 Apr 2023 07:39:39 +0200 Subject: [PATCH 094/815] test: fix tests --- tests/core/util_spec.lua | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/tests/core/util_spec.lua b/tests/core/util_spec.lua index 86b9f06..ee829a1 100644 --- a/tests/core/util_spec.lua +++ b/tests/core/util_spec.lua @@ -51,7 +51,7 @@ describe("util", function() local files = Helpers.fs_create(test.files) -- test with empty cache - package.loaded["lazy.core.cache"] = nil + Cache.reset() local root = Util.find_root(test.mod) assert(root, "no root found for " .. test.mod .. " (test " .. t .. ")") assert.same(Helpers.path(test.root), root) @@ -63,7 +63,7 @@ describe("util", function() assert.same(expected, mods) -- fill the cache - package.loaded["lazy.core.cache"] = nil + Cache.reset() root = Util.find_root(test.mod) assert(root, "no root found for " .. test.mod .. " (test " .. t .. ")") assert.same(Helpers.path(test.root), root) @@ -77,12 +77,9 @@ describe("util", function() end) it("find the correct root with dels", function() - Cache.cache = {} - Cache._topmods = {} - Cache.topmods_rtp = false + Cache.reset() vim.opt.rtp:append(Helpers.path("old")) Helpers.fs_create({ "old/lua/foobar/init.lua" }) - Cache.cache["foobar"] = { modpath = Helpers.path("old/lua/foobar/init.lua") } local root = Util.find_root("foobar") assert(root, "foobar root not found") assert.same(Helpers.path("old/lua/foobar"), root) @@ -91,7 +88,6 @@ describe("util", function() assert(not vim.loop.fs_stat(Helpers.path("old/lua/foobar")), "old/lua/foobar should not exist") -- vim.opt.rtp = rtp - Cache._topmods = {} vim.opt.rtp:append(Helpers.path("new")) Helpers.fs_create({ "new/lua/foobar/init.lua" }) root = Util.find_root("foobar") @@ -99,30 +95,6 @@ describe("util", function() assert.same(Helpers.path("new/lua/foobar"), root) end) - it("find the correct root with mod dels", function() - Cache.cache = {} - Cache._topmods = {} - Cache.enabled = true - vim.opt.rtp:append(Helpers.path("old")) - Helpers.fs_create({ "old/lua/foobar/test.lua" }) - Cache.cache["foobar.test"] = { modpath = Helpers.path("old/lua/foobar/test.lua") } - local root = Util.find_root("foobar") - assert(root, "foobar root not found") - assert.same(Helpers.path("old/lua/foobar"), root) - assert(not Cache.cache["foobar"], "foobar should not be in cache") - assert(Cache.cache["foobar.test"], "foobar.test not found in cache") - - Helpers.fs_rm("old") - - -- vim.opt.rtp = rtp - Cache._topmods = {} - vim.opt.rtp:append(Helpers.path("new")) - Helpers.fs_create({ "new/lua/foobar/test.lua" }) - root = Util.find_root("foobar") - assert(root, "foobar root not found") - assert.same(Helpers.path("new/lua/foobar"), root) - end) - it("merges correctly", function() local tests = { { From 86c1a767f041edf62a068c9fe2ea912058521477 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 16 Apr 2023 05:40:19 +0000 Subject: [PATCH 095/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 7653924..f7205d5 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 March 25 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 16 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From c8cad548950807848de11e3710de2b560758ecb4 Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Sun, 16 Apr 2023 14:07:41 +0200 Subject: [PATCH 096/815] fix(checkhealth): use non-deprecated versions if possible (#729) --- lua/lazy/health.lua | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 83096c0..38fa0ed 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -2,13 +2,19 @@ local Config = require("lazy.core.config") local M = {} +-- "report_" prefix has been deprecated, use the recommended replacements if they exist. +local start = vim.health.start or vim.health.report_start +local ok = vim.health.ok or vim.health.report_ok +local warn = vim.health.warn or vim.health.report_warn +local error = vim.health.error or vim.health.report_error + function M.check() - vim.health.report_start("lazy.nvim") + start("lazy.nvim") if vim.fn.executable("git") == 1 then - vim.health.report_ok("Git installed") + ok("Git installed") else - vim.health.report_error("Git not installd?") + error("Git not installd?") end local sites = vim.opt.packpath:get() @@ -22,18 +28,18 @@ function M.check() for _, packs in ipairs(vim.fn.expand(site .. "/pack/*", false, true)) do if not packs:find("[/\\]dist$") and vim.loop.fs_stat(packs) then existing = true - vim.health.report_warn("found existing packages at `" .. packs .. "`") + warn("found existing packages at `" .. packs .. "`") end end end if not existing then - vim.health.report_ok("no existing packages found by other package managers") + ok("no existing packages found by other package managers") end for _, name in ipairs({ "packer", "plugged", "paq" }) do for _, path in ipairs(vim.opt.rtp:get()) do if path:find(name, 1, true) then - vim.health.report_error("Found paths on the rtp from another plugin manager `" .. name .. "`") + error("Found paths on the rtp from another plugin manager `" .. name .. "`") break end end @@ -41,9 +47,9 @@ function M.check() local packer_compiled = vim.fn.stdpath("config") .. "/plugin/packer_compiled.lua" if vim.loop.fs_stat(packer_compiled) then - vim.health.report_error("please remove the file `" .. packer_compiled .. "`") + error("please remove the file `" .. packer_compiled .. "`") else - vim.health.report_ok("packer_compiled.lua not found") + ok("packer_compiled.lua not found") end local spec = Config.spec @@ -52,14 +58,14 @@ function M.check() M.check_override(plugin) end if #spec.notifs > 0 then - vim.health.report_error("Issues were reported when loading your specs:") + error("Issues were reported when loading your specs:") for _, notif in ipairs(spec.notifs) do local lines = vim.split(notif.msg, "\n") for _, line in ipairs(lines) do if notif.level == vim.log.levels.ERROR then - vim.health.report_error(line) + error(line) else - vim.health.report_warn(line) + warn(line) end end end @@ -71,7 +77,7 @@ function M.check_valid(plugin) for key in pairs(plugin) do if not vim.tbl_contains(M.valid, key) then if key ~= "module" or type(plugin.module) ~= "boolean" then - vim.health.report_warn("{" .. plugin.name .. "}: unknown key <" .. key .. ">") + warn("{" .. plugin.name .. "}: unknown key <" .. key .. ">") end end end @@ -89,7 +95,7 @@ function M.check_override(plugin) for key, value in pairs(plugin._.super) do if not vim.tbl_contains(skip, key) and plugin[key] and plugin[key] ~= value then - vim.health.report_warn("{" .. plugin.name .. "}: overriding <" .. key .. ">") + warn("{" .. plugin.name .. "}: overriding <" .. key .. ">") end end end From eddee830ede0f95ced9802ca9abd3f8f662e5cc5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 16 Apr 2023 14:15:55 +0200 Subject: [PATCH 097/815] chore(main): release 9.14.3 (#728) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index abf9bf6..9b22086 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [9.14.3](https://github.com/folke/lazy.nvim/compare/v9.14.2...v9.14.3) (2023-04-16) + + +### Bug Fixes + +* **checkhealth:** use non-deprecated versions if possible ([#729](https://github.com/folke/lazy.nvim/issues/729)) ([c8cad54](https://github.com/folke/lazy.nvim/commit/c8cad548950807848de11e3710de2b560758ecb4)) +* **render:** show message if not yet committed ([#707](https://github.com/folke/lazy.nvim/issues/707)) ([b7a1a0f](https://github.com/folke/lazy.nvim/commit/b7a1a0fbaf1bd0f394783951f16d4c9f8c9dc210)) + ## [9.14.2](https://github.com/folke/lazy.nvim/compare/v9.14.1...v9.14.2) (2023-03-25) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index dc922e7..105ea16 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.2" -- x-release-please-version +M.version = "9.14.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From b582fc554582c755c221fdcbb7dce648e971cd88 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Apr 2023 10:17:22 +0200 Subject: [PATCH 098/815] fix(cmd): show descriptive error when command was not found after loading its plugins --- lua/lazy/core/handler/cmd.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/handler/cmd.lua b/lua/lazy/core/handler/cmd.lua index 86711de..28c7d9b 100644 --- a/lua/lazy/core/handler/cmd.lua +++ b/lua/lazy/core/handler/cmd.lua @@ -28,14 +28,20 @@ function M:_add(cmd) command.range = { event.line1, event.line2 } end + ---@type string + local plugins = "`" .. table.concat(vim.tbl_values(self.active[cmd]), ", ") .. "`" + self:_load(cmd) local info = vim.api.nvim_get_commands({})[cmd] + if not info then + return Util.error("Command `" .. cmd .. "` not found after loading " .. plugins) + end + command.nargs = info.nargs if event.args and event.args ~= "" and info.nargs and info.nargs:find("[1?]") then command.args = { event.args } end - vim.cmd(command) end, { bang = true, From a7f18f0192735f84384d929c64abe966ebdc789c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 18 Apr 2023 08:18:07 +0000 Subject: [PATCH 099/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index f7205d5..1eb33a7 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 16 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 18 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 5f13f69851d2b244891d77590db9e3370197facc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 18 Apr 2023 10:21:25 +0200 Subject: [PATCH 100/815] chore(main): release 9.14.4 (#734) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b22086..4ac55ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.4](https://github.com/folke/lazy.nvim/compare/v9.14.3...v9.14.4) (2023-04-18) + + +### Bug Fixes + +* **cmd:** show descriptive error when command was not found after loading its plugins ([b582fc5](https://github.com/folke/lazy.nvim/commit/b582fc554582c755c221fdcbb7dce648e971cd88)) + ## [9.14.3](https://github.com/folke/lazy.nvim/compare/v9.14.2...v9.14.3) (2023-04-16) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 105ea16..8ca0a16 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.3" -- x-release-please-version +M.version = "9.14.4" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 78b981b1f33c50ebc51262694bf99e32cc3012b4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 19 Apr 2023 12:59:29 +0200 Subject: [PATCH 101/815] fix(loader): keep using the internal lua cache till 0.9.1 --- lua/lazy/core/cache.lua | 10 ---------- lua/lazy/init.lua | 2 +- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index d60d271..ea9f4d9 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -1,13 +1,3 @@ ----@diagnostic disable: duplicate-doc-alias ----@diagnostic disable: duplicate-doc-field ----@diagnostic disable: duplicate-set-field - --- interop with the native Neovim loader -if vim.loader then - return vim.loader -end - --- NEOVIM local uv = vim.loop local M = {} diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index 2f015b6..2b41ffd 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -34,7 +34,7 @@ function M.setup(spec, opts) local start = vim.loop.hrtime() -- use the NEovim cache if available - if vim.loader then + if vim.loader and vim.fn.has("nvim-0.9.1") == 1 then package.loaded["lazy.core.cache"] = vim.loader end From 349af248614244e3769265eb67404b41ff965afe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 19 Apr 2023 11:00:24 +0000 Subject: [PATCH 102/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 1eb33a7..03bbc5e 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 18 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 19 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 5c89dc52f42e5058a46b0912d7d9042f564e44e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 19 Apr 2023 13:14:15 +0200 Subject: [PATCH 103/815] chore(main): release 9.14.5 (#738) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ac55ad..fa52df9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.5](https://github.com/folke/lazy.nvim/compare/v9.14.4...v9.14.5) (2023-04-19) + + +### Bug Fixes + +* **loader:** keep using the internal lua cache till 0.9.1 ([78b981b](https://github.com/folke/lazy.nvim/commit/78b981b1f33c50ebc51262694bf99e32cc3012b4)) + ## [9.14.4](https://github.com/folke/lazy.nvim/compare/v9.14.3...v9.14.4) (2023-04-18) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 8ca0a16..cd936a1 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.4" -- x-release-please-version +M.version = "9.14.5" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From dff6f07290b12a2904d9b6a00ba207f6dd68193b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 22 Apr 2023 14:10:06 +0200 Subject: [PATCH 104/815] style(plugins): more descriptive error when a spec module didnt return any specs --- lua/lazy/core/plugin.lua | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index a0b1428..72d5a06 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -268,7 +268,18 @@ function Spec:import(spec) ---@diagnostic disable-next-line: no-unknown package.loaded[modname] = nil Util.try(function() - self:normalize(require(modname)) + local mod = require(modname) + if type(mod) ~= "table" then + self.importing = nil + return self:error( + "Invalid spec module: `" + .. modname + .. "`\nExpected a `table` of specs, but a `" + .. type(mod) + .. "` was returned instead" + ) + end + self:normalize(mod) self.importing = nil Util.track() end, { From fe28f4b73e0df887ec20196a00a1eddd12a2cf5f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 22 Apr 2023 12:10:51 +0000 Subject: [PATCH 105/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 03bbc5e..4d29308 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 19 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 22 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 0cbf4669138961c27566de684a0df95c01cd35ad Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 23 Apr 2023 15:59:31 +0200 Subject: [PATCH 106/815] fix(util): use vim.o.shell by default --- lua/lazy/util.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 743a679..b2629b1 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -101,7 +101,7 @@ function M.float_term(cmd, opts) cmd = { cmd } end if #cmd == 0 then - cmd = { vim.env.SHELL or vim.o.shell } + cmd = { vim.o.shell } end opts = opts or {} local float = M.float(opts) From f66e68c00ef65b10e5b44ac80f68dd8e09a5927f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 23 Apr 2023 14:00:22 +0000 Subject: [PATCH 107/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 4d29308..ae80ca4 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 22 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 23 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From a55ab6062520a9ea13e90e90bf3e3ef3843c5b0f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 23 Apr 2023 16:35:26 +0200 Subject: [PATCH 108/815] chore(main): release 9.14.6 (#741) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa52df9..690e425 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.6](https://github.com/folke/lazy.nvim/compare/v9.14.5...v9.14.6) (2023-04-23) + + +### Bug Fixes + +* **util:** use vim.o.shell by default ([0cbf466](https://github.com/folke/lazy.nvim/commit/0cbf4669138961c27566de684a0df95c01cd35ad)) + ## [9.14.5](https://github.com/folke/lazy.nvim/compare/v9.14.4...v9.14.5) (2023-04-19) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index cd936a1..a4a9d44 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.5" -- x-release-please-version +M.version = "9.14.6" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From a7585880081a8ae3dfbecfced960dcfdc124c361 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Apr 2023 07:54:21 +0200 Subject: [PATCH 109/815] fix(build): make sure to properly load handlers for plugins that were built during startup. Fixes #744 --- lua/lazy/core/handler/init.lua | 7 ++++--- lua/lazy/core/loader.lua | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lua/lazy/core/handler/init.lua b/lua/lazy/core/handler/init.lua index 5e9074b..af85820 100644 --- a/lua/lazy/core/handler/init.lua +++ b/lua/lazy/core/handler/init.lua @@ -25,7 +25,7 @@ function M.setup() end for _, plugin in pairs(Config.plugins) do Util.try(function() - M.enable(plugin) + M.enable(plugin, true) end, "Failed to setup handlers for " .. plugin.name) end end @@ -40,8 +40,9 @@ function M.disable(plugin) end ---@param plugin LazyPlugin -function M.enable(plugin) - if not plugin._.loaded then +---@param force? boolean +function M.enable(plugin, force) + if force or not plugin._.loaded then for type, handler in pairs(M.handlers) do if plugin[type] then handler:add(plugin) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 6e3b653..03f1105 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -70,7 +70,7 @@ function M.install_missing() end end require("lazy.manage").install({ wait = true, lockfile = true }) - -- remove and installed plugins from indexed, so cache will index again + -- remove any installed plugins from indexed, so cache will index again for _, p in pairs(Config.plugins) do if p._.installed then Cache.reset(p.dir) From 24e8fb0f8d35b0771adc656ad8e2b8164efb16d9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Apr 2023 05:55:04 +0000 Subject: [PATCH 110/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index ae80ca4..3c152ac 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 23 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 24 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 903f0fe542fc35b74f3c09494f9c175346dfa76d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 08:41:31 +0200 Subject: [PATCH 111/815] chore(main): release 9.14.7 (#745) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 690e425..312ad8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.7](https://github.com/folke/lazy.nvim/compare/v9.14.6...v9.14.7) (2023-04-24) + + +### Bug Fixes + +* **build:** make sure to properly load handlers for plugins that were built during startup. Fixes [#744](https://github.com/folke/lazy.nvim/issues/744) ([a758588](https://github.com/folke/lazy.nvim/commit/a7585880081a8ae3dfbecfced960dcfdc124c361)) + ## [9.14.6](https://github.com/folke/lazy.nvim/compare/v9.14.5...v9.14.6) (2023-04-23) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index a4a9d44..018c044 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.6" -- x-release-please-version +M.version = "9.14.7" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 0c7b41872ed20f12b45c41cadbccbf74554ac68e Mon Sep 17 00:00:00 2001 From: Ulibos <49131389+Ulibos@users.noreply.github.com> Date: Thu, 27 Apr 2023 19:21:02 +0300 Subject: [PATCH 112/815] fix(health): show error if setup didn't run * Fix back bootstrapping and healthcheck for fresh install with no packages to fetch. * Revert changes to bootstrapping, make checkhealth produce more meaningful message. --- lua/lazy/health.lua | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 38fa0ed..f0ccb22 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -53,19 +53,23 @@ function M.check() end local spec = Config.spec - for _, plugin in pairs(spec.plugins) do - M.check_valid(plugin) - M.check_override(plugin) - end - if #spec.notifs > 0 then - error("Issues were reported when loading your specs:") - for _, notif in ipairs(spec.notifs) do - local lines = vim.split(notif.msg, "\n") - for _, line in ipairs(lines) do - if notif.level == vim.log.levels.ERROR then - error(line) - else - warn(line) + if spec == nil then + error("No plugins loaded. Did you forget to run `require(\"lazy\").setup()`?") + else + for _, plugin in pairs(spec.plugins) do + M.check_valid(plugin) + M.check_override(plugin) + end + if #spec.notifs > 0 then + error("Issues were reported when loading your specs:") + for _, notif in ipairs(spec.notifs) do + local lines = vim.split(notif.msg, "\n") + for _, line in ipairs(lines) do + if notif.level == vim.log.levels.ERROR then + error(line) + else + warn(line) + end end end end From 5d3d5fb31dcf2ef6f1bda58972c5adfcbd8ff944 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 27 Apr 2023 16:21:42 +0000 Subject: [PATCH 113/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 3c152ac..e73f957 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 24 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 27 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From d6a782c7002682f4a01b79fc3918c4584ad6e8fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 28 Apr 2023 10:46:45 +0200 Subject: [PATCH 114/815] chore(main): release 9.14.8 (#759) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 312ad8b..ad36ef0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.8](https://github.com/folke/lazy.nvim/compare/v9.14.7...v9.14.8) (2023-04-27) + + +### Bug Fixes + +* **health:** show error if setup didn't run ([0c7b418](https://github.com/folke/lazy.nvim/commit/0c7b41872ed20f12b45c41cadbccbf74554ac68e)) + ## [9.14.7](https://github.com/folke/lazy.nvim/compare/v9.14.6...v9.14.7) (2023-04-24) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 018c044..2805b63 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.7" -- x-release-please-version +M.version = "9.14.8" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From bb5cc9ef3bbb17541929b745f74551c900188099 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 28 Apr 2023 08:47:28 +0000 Subject: [PATCH 115/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index e73f957..5ce7770 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 27 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 28 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From b00d6f7102a3345704edb46cbabf2dfa21d78d24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Yngve=20Lerv=C3=A5g?= Date: Tue, 2 May 2023 21:30:28 +0200 Subject: [PATCH 116/815] fix(ui): don't pad empty lines (#768) --- lua/lazy/view/text.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/view/text.lua b/lua/lazy/view/text.lua index 5351db4..f4afb6e 100644 --- a/lua/lazy/view/text.lua +++ b/lua/lazy/view/text.lua @@ -72,6 +72,9 @@ function Text:render(buf) str = str .. segment.str end + if str:match("^%s*$") then + str = "" + end table.insert(lines, str) end From 5a470ae558b7443e054ab9bed262b73231aeb47f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 2 May 2023 19:31:06 +0000 Subject: [PATCH 117/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 5ce7770..211c468 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 April 28 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 02 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 5b7b8eeceae7429cbf0d8b80c8a8375beaee3bc3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 2 May 2023 21:32:16 +0200 Subject: [PATCH 118/815] chore(main): release 9.14.9 (#769) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad36ef0..64e6b57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.9](https://github.com/folke/lazy.nvim/compare/v9.14.8...v9.14.9) (2023-05-02) + + +### Bug Fixes + +* **ui:** don't pad empty lines ([#768](https://github.com/folke/lazy.nvim/issues/768)) ([b00d6f7](https://github.com/folke/lazy.nvim/commit/b00d6f7102a3345704edb46cbabf2dfa21d78d24)) + ## [9.14.8](https://github.com/folke/lazy.nvim/compare/v9.14.7...v9.14.8) (2023-04-27) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 2805b63..f158c61 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.8" -- x-release-please-version +M.version = "9.14.9" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 98ba47efedc4a29d2258fe80434d87bf5f72baa2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 2 May 2023 21:47:29 +0200 Subject: [PATCH 119/815] fix(ui): issue with rendering empty lines. Fixes #770 --- lua/lazy/view/text.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/text.lua b/lua/lazy/view/text.lua index f4afb6e..edbf622 100644 --- a/lua/lazy/view/text.lua +++ b/lua/lazy/view/text.lua @@ -88,7 +88,7 @@ function Text:render(buf) local width = vim.fn.strlen(segment.str) local extmark = segment.hl - if extmark then + if extmark and width > 0 then if type(extmark) == "string" then extmark = { hl_group = extmark, end_col = col + width } end From ceb413678dfcf3d5455208959185e3db1f7892c7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 2 May 2023 21:49:29 +0200 Subject: [PATCH 120/815] chore(main): release 9.14.10 (#772) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64e6b57..9418e04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.10](https://github.com/folke/lazy.nvim/compare/v9.14.9...v9.14.10) (2023-05-02) + + +### Bug Fixes + +* **ui:** issue with rendering empty lines. Fixes [#770](https://github.com/folke/lazy.nvim/issues/770) ([98ba47e](https://github.com/folke/lazy.nvim/commit/98ba47efedc4a29d2258fe80434d87bf5f72baa2)) + ## [9.14.9](https://github.com/folke/lazy.nvim/compare/v9.14.8...v9.14.9) (2023-05-02) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f158c61..3d925cc 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.9" -- x-release-please-version +M.version = "9.14.10" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From dbe0e29d85e2769be6c9738c176ba6d8b0c6817a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 5 May 2023 14:06:59 +0200 Subject: [PATCH 121/815] fix(ui): don' render extmarks for empty lines --- lua/lazy/view/text.lua | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/lua/lazy/view/text.lua b/lua/lazy/view/text.lua index edbf622..614381a 100644 --- a/lua/lazy/view/text.lua +++ b/lua/lazy/view/text.lua @@ -82,30 +82,32 @@ function Text:render(buf) vim.api.nvim_buf_clear_namespace(buf, Config.ns, 0, -1) for l, line in ipairs(self._lines) do - local col = self.padding + if lines[l] ~= "" then + local col = self.padding - for _, segment in ipairs(line) do - local width = vim.fn.strlen(segment.str) + for _, segment in ipairs(line) do + local width = vim.fn.strlen(segment.str) - local extmark = segment.hl - if extmark and width > 0 then - if type(extmark) == "string" then - extmark = { hl_group = extmark, end_col = col + width } + local extmark = segment.hl + if extmark then + if type(extmark) == "string" then + extmark = { hl_group = extmark, end_col = col + width } + end + ---@cast extmark Extmark + + local extmark_col = extmark.col or col + extmark.col = nil + local ok = pcall(vim.api.nvim_buf_set_extmark, buf, Config.ns, l - 1, extmark_col, extmark) + if not ok then + Util.error( + "Failed to set extmark. Please report a bug with this info:\n" + .. vim.inspect({ segment = segment, line = line }) + ) + end end - ---@cast extmark Extmark - local extmark_col = extmark.col or col - extmark.col = nil - local ok = pcall(vim.api.nvim_buf_set_extmark, buf, Config.ns, l - 1, extmark_col, extmark) - if not ok then - Util.error( - "Failed to set extmark. Please report a bug with this info:\n" - .. vim.inspect({ segment = segment, line = line }) - ) - end + col = col + width end - - col = col + width end end end From 83a625f5c884a3ceee821ce54a812c8321ecba31 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 May 2023 12:07:43 +0000 Subject: [PATCH 122/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 211c468..75651e3 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 02 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 05 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 51a3873ccd59239e4dff3319561d51031f4b52d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 7 May 2023 19:32:26 +0200 Subject: [PATCH 123/815] chore(main): release 9.14.11 (#782) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9418e04..9fd301d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.14.11](https://github.com/folke/lazy.nvim/compare/v9.14.10...v9.14.11) (2023-05-05) + + +### Bug Fixes + +* **ui:** don' render extmarks for empty lines ([dbe0e29](https://github.com/folke/lazy.nvim/commit/dbe0e29d85e2769be6c9738c176ba6d8b0c6817a)) + ## [9.14.10](https://github.com/folke/lazy.nvim/compare/v9.14.9...v9.14.10) (2023-05-02) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 3d925cc..f92354e 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.10" -- x-release-please-version +M.version = "9.14.11" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 9ac19880b677d08f416c5189ffc2dc023084a159 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 7 May 2023 17:33:12 +0000 Subject: [PATCH 124/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 75651e3..3f4c0a3 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 05 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 07 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From d2d67b5a0ba90a33eeae0a1a661249b26754143b Mon Sep 17 00:00:00 2001 From: Fraser Hanson Date: Wed, 10 May 2023 08:20:06 -0700 Subject: [PATCH 125/815] fix(config): use url_format for the lazy plugin (#792) Co-authored-by: Fraser Hanson --- lua/lazy/core/plugin.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 72d5a06..f06a1ff 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -375,7 +375,7 @@ function M.load() -- load specs Util.track("spec") Config.spec = Spec.new() - Config.spec:parse({ vim.deepcopy(Config.options.spec), { url = "https://github.com/folke/lazy.nvim.git" } }) + Config.spec:parse({ vim.deepcopy(Config.options.spec), { "folke/lazy.nvim" } }) -- override some lazy props local lazy = Config.spec.plugins["lazy.nvim"] From 652b6febf8d5c99eb8cf4a1cec63da6db62e77d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 10 May 2023 15:26:00 +0000 Subject: [PATCH 126/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 3f4c0a3..3ea8a68 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 07 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 10 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -28,7 +28,6 @@ Table of Contents *lazy.nvim-table-of-contents* FEATURES *lazy.nvim-lazy.nvim-features* - - Manage all your Neovim plugins with a powerful UI - Fast startup times thanks to automatic caching and bytecode compilation of Lua modules - Partial clones instead of shallow clones @@ -50,7 +49,6 @@ FEATURES *lazy.nvim-lazy.nvim-features* REQUIREMENTS *lazy.nvim-lazy.nvim-requirements* - - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) - a Nerd Font **(optional)** @@ -83,7 +81,6 @@ Nextstep is to add **lazy.nvim** below the code added in the prior step in require("lazy").setup(plugins, opts) < - - **plugins**this should be a `table` or a `string` - `table`a list with your |lazy.nvim-plugin-spec| - `string`a Lua module name that contains your |lazy.nvim-plugin-spec|. See |lazy.nvim-structuring-your-plugins| @@ -220,7 +217,6 @@ types** and **key mappings**. Plugins will be lazy-loaded when one of the following is `true` - - Theplugin only exists as a dependency in your spec - It has an `event`, `cmd`, `ft` or `keys` key - `config.defaults.lazy == true` @@ -242,7 +238,6 @@ LAZY KEY MAPPINGS The `keys` property can be a `string` or `string[]` for simple normal-mode mappings, or it can be a `LazyKeys` table with the following key-value pairs: - - **[1]**(`string`) lhs **(required)** - **[2]**(`string|fun()`) rhs **(optional)** - **mode**(`string|string[]`) mode **(optional, defaults to "n")** @@ -276,7 +271,6 @@ The `version` property supports Semver ranges. Click to see some examples ~ - - latest stable version (this excludes pre-release versions) - `1.2.x`any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. - `^1.2.3`any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. @@ -620,7 +614,6 @@ example, if you want to sync lazy from the cmdline, you can use: `opts` is a table with the following key-values: - - **wait**when true, then the call will wait till the operation completed - **show**when false, the UI will not be shown - **plugins**a list of plugin names to run the operation on @@ -668,7 +661,6 @@ USER EVENTS ~ The following user events will be triggered: - - **LazyDone**when lazy has finished starting up and loaded your config - **LazySync**after running sync - **LazyInstall**after an install @@ -723,8 +715,10 @@ sequence for more flexibility and better performance. In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet)3. All files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`)4. All `/after/plugin` files are sourced (this includes `/after` from plugins) +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) Files from runtime directories are always sourced in alphabetical order. @@ -739,21 +733,18 @@ to the other files. The benefits of using this approach: - - Simple to **add** new plugin specs. Just create a new file in your plugins module. - Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. - Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. Example: - - `~/.config/nvim/init.lua` >lua require("lazy").setup("plugins") < - - `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** >lua @@ -764,13 +755,11 @@ Example: } < - - Any lua file in `~/.config/nvim/lua/plugins/.lua` will be automatically merged in the main plugin spec For a real-life example, you can check LazyVim and more specifically: - - lazyvim.plugins contains all the plugin specs that will be loaded @@ -811,7 +800,6 @@ MIGRATION GUIDE *lazy.nvim-lazy.nvim-migration-guide* PACKER.NVIM ~ - - `setup` `init` - `requires` `dependencies` - `as` `name` @@ -844,7 +832,6 @@ loaded. PAQ-NVIM ~ - - `as` `name` - `opt` `lazy` - `run` `build` @@ -855,7 +842,6 @@ UNINSTALLING *lazy.nvim-lazy.nvim-uninstalling* To uninstall **lazy.nvim**, you need to remove the following files and directories: - - **data**`~/.local/share/nvim/lazy` - **state**`~/.local/state/nvim/lazy` - **lockfile**`~/.config/nvim/lazy-lock.json` @@ -934,7 +920,6 @@ Click to see all highlight groups ~ OTHER NEOVIM PLUGIN MANAGERS IN LUA*lazy.nvim-lazy.nvim-other-neovim-plugin-managers-in-lua* - - packer.nvim - paq-nvim - neopm From 96dd2058fb5427d87589825ad6001ad017548e81 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 13 May 2023 13:24:38 +0200 Subject: [PATCH 127/815] feat(ui): show the loaded icon for local plugins in a different color --- lua/lazy/view/colors.lua | 1 + lua/lazy/view/render.lua | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lua/lazy/view/colors.lua b/lua/lazy/view/colors.lua index 333af82..6d43f1f 100644 --- a/lua/lazy/view/colors.lua +++ b/lua/lazy/view/colors.lua @@ -13,6 +13,7 @@ M.colors = { Prop = "Conceal", -- property Value = "@string", -- value of a property NoCond = "DiagnosticWarn", -- unloaded icon for a plugin where `cond()` was false + Local = "Constant", ProgressDone = "Constant", -- progress bar done ProgressTodo = "LineNr", -- progress bar todo Special = "@punctuation.special", diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 36e1f96..d5bc9df 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -386,12 +386,13 @@ end ---@param plugin LazyPlugin function M:plugin(plugin) + local hl = plugin._.is_local and "LazyLocal" or "LazySpecial" if plugin._.loaded then - self:append(" " .. Config.options.ui.icons.loaded .. " ", "LazySpecial"):append(plugin.name) + self:append(" " .. Config.options.ui.icons.loaded .. " ", hl):append(plugin.name) elseif plugin._.cond == false then self:append(" " .. Config.options.ui.icons.not_loaded .. " ", "LazyNoCond"):append(plugin.name) else - self:append(" " .. Config.options.ui.icons.not_loaded .. " ", "LazySpecial"):append(plugin.name) + self:append(" " .. Config.options.ui.icons.not_loaded .. " ", hl):append(plugin.name) end local plugin_start = self:row() if plugin._.loaded then @@ -403,9 +404,9 @@ function M:plugin(plugin) if plugin[handler] then local trigger = {} for _, value in ipairs(plugin[handler]) do - table.insert(trigger, type(value) == 'table' and value[1] or value) + table.insert(trigger, type(value) == "table" and value[1] or value) end - reason[handler] = table.concat(trigger, ' ') + reason[handler] = table.concat(trigger, " ") end end for _, other in pairs(Config.plugins) do From 3fef7697869bd87d53d57267b5a018580c1e99ca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 13 May 2023 11:25:25 +0000 Subject: [PATCH 128/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 3ea8a68..bab6b9e 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 10 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 13 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From e9b3b83914c2adf5385111a4f163ced0b4b7f529 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 May 2023 15:48:53 +0200 Subject: [PATCH 129/815] chore(main): release 9.15.0 (#795) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fd301d..4cce9b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [9.15.0](https://github.com/folke/lazy.nvim/compare/v9.14.11...v9.15.0) (2023-05-13) + + +### Features + +* **ui:** show the loaded icon for local plugins in a different color ([96dd205](https://github.com/folke/lazy.nvim/commit/96dd2058fb5427d87589825ad6001ad017548e81)) + + +### Bug Fixes + +* **config:** use url_format for the lazy plugin ([#792](https://github.com/folke/lazy.nvim/issues/792)) ([d2d67b5](https://github.com/folke/lazy.nvim/commit/d2d67b5a0ba90a33eeae0a1a661249b26754143b)) + ## [9.14.11](https://github.com/folke/lazy.nvim/compare/v9.14.10...v9.14.11) (2023-05-05) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f92354e..5401a6a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.14.11" -- x-release-please-version +M.version = "9.15.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From dab6cd50806d6a6b0e8267f628d5fd6b112b151c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 13 May 2023 16:09:48 +0200 Subject: [PATCH 130/815] feat(loader): added explicit support for finding the main module for mini.nvim plugins --- lua/lazy/core/loader.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 03f1105..a6eeb55 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -343,6 +343,9 @@ function M.get_main(plugin) if plugin.main then return plugin.main end + if plugin.name ~= "mini.nvim" and plugin.name:match("^mini%..*$") then + return plugin.name + end local normname = Util.normname(plugin.name) ---@type string[] local mods = {} @@ -356,6 +359,7 @@ function M.get_main(plugin) break end end + return #mods == 1 and mods[1] or nil end From aba872ec78ffe7f7367764ab0fff6f0170421fde Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 May 2023 16:12:49 +0200 Subject: [PATCH 131/815] chore(main): release 9.16.0 (#801) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cce9b2..689efb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.16.0](https://github.com/folke/lazy.nvim/compare/v9.15.0...v9.16.0) (2023-05-13) + + +### Features + +* **loader:** added explicit support for finding the main module for mini.nvim plugins ([dab6cd5](https://github.com/folke/lazy.nvim/commit/dab6cd50806d6a6b0e8267f628d5fd6b112b151c)) + ## [9.15.0](https://github.com/folke/lazy.nvim/compare/v9.14.11...v9.15.0) (2023-05-13) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 5401a6a..e50df72 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.15.0" -- x-release-please-version +M.version = "9.16.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 80c4decc3226551b433dfea5e459998a96f17822 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 17 May 2023 19:35:16 +0200 Subject: [PATCH 132/815] fix(loader): dont clear tasks when istalling missing plugins --- lua/lazy/core/loader.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index a6eeb55..ba6a968 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -69,7 +69,7 @@ function M.install_missing() break end end - require("lazy.manage").install({ wait = true, lockfile = true }) + require("lazy.manage").install({ wait = true, lockfile = true, clear = false }) -- remove any installed plugins from indexed, so cache will index again for _, p in pairs(Config.plugins) do if p._.installed then From aecdaab6a6ce8c9fdf9f983d5f943c6cfb11bf61 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 17 May 2023 19:36:00 +0200 Subject: [PATCH 133/815] fix(loader): reset cache before installing plugins during startup. Fixes #803 --- lua/lazy/core/loader.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index ba6a968..32067b3 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -69,6 +69,7 @@ function M.install_missing() break end end + Cache.reset() require("lazy.manage").install({ wait = true, lockfile = true, clear = false }) -- remove any installed plugins from indexed, so cache will index again for _, p in pairs(Config.plugins) do From a4e49029b9023797ea13f43fe9161dd548138686 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 17 May 2023 17:36:45 +0000 Subject: [PATCH 134/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index bab6b9e..56f526d 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 13 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 17 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 53e1c49baed4009eccf103dbc77fcb06255019d8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 17 May 2023 19:38:31 +0200 Subject: [PATCH 135/815] chore(main): release 9.16.1 (#804) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 689efb5..9820f48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [9.16.1](https://github.com/folke/lazy.nvim/compare/v9.16.0...v9.16.1) (2023-05-17) + + +### Bug Fixes + +* **loader:** dont clear tasks when istalling missing plugins ([80c4dec](https://github.com/folke/lazy.nvim/commit/80c4decc3226551b433dfea5e459998a96f17822)) +* **loader:** reset cache before installing plugins during startup. Fixes [#803](https://github.com/folke/lazy.nvim/issues/803) ([aecdaab](https://github.com/folke/lazy.nvim/commit/aecdaab6a6ce8c9fdf9f983d5f943c6cfb11bf61)) + ## [9.16.0](https://github.com/folke/lazy.nvim/compare/v9.15.0...v9.16.0) (2023-05-13) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index e50df72..28a6bec 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.16.0" -- x-release-please-version +M.version = "9.16.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 11131eafa165e54b08aeff3d7e35c65ef8b6e034 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 18 May 2023 19:51:14 +0200 Subject: [PATCH 136/815] feat(cmd): added `Lazy load all` to load all plugins --- lua/lazy/view/commands.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index f1ab877..0476400 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -69,6 +69,9 @@ function M.complete(cmd, prefix) end ---@type string[] local plugins = {} + if cmd == "load" then + plugins[#plugins + 1] = "all" + end for name, plugin in pairs(Config.plugins) do if cmd ~= "load" or not plugin._.loaded then plugins[#plugins + 1] = name @@ -86,6 +89,9 @@ function M.setup() ---@type ManagerOpts local opts = { wait = cmd.bang == true } local prefix, args = M.parse(cmd.args) + if #args == 1 and args[1] == "all" then + args = vim.tbl_keys(Config.plugins) + end if #args > 0 then ---@param plugin string opts.plugins = vim.tbl_map(function(plugin) From 6d4135d83d00f83a797dfe0f93a8d3fce08e6a2f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 18 May 2023 17:52:02 +0000 Subject: [PATCH 137/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 56f526d..4d7454b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 17 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 18 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From c711b4f8a6211a8ea3f3c35f0962ac0b6b8550cc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 10:23:49 +0200 Subject: [PATCH 138/815] chore(main): release 9.17.0 (#806) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9820f48..3fe0414 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.17.0](https://github.com/folke/lazy.nvim/compare/v9.16.1...v9.17.0) (2023-05-18) + + +### Features + +* **cmd:** added `Lazy load all` to load all plugins ([11131ea](https://github.com/folke/lazy.nvim/commit/11131eafa165e54b08aeff3d7e35c65ef8b6e034)) + ## [9.16.1](https://github.com/folke/lazy.nvim/compare/v9.16.0...v9.16.1) (2023-05-17) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 28a6bec..f4f2240 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.16.1" -- x-release-please-version +M.version = "9.17.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 91564cb0a6d038d7e0eeaf68d505ed2627de625b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 19 May 2023 08:24:27 +0000 Subject: [PATCH 139/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 4d7454b..bce0050 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 18 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 19 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From cc7a764aecec11c9598ccd442a6879eed4e85558 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 20 May 2023 09:26:23 +0200 Subject: [PATCH 140/815] fix(ui): close ui when opening a help file. Fixes #808 --- lua/lazy/view/init.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index b661d5a..ea35347 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -172,7 +172,10 @@ function M:setup_patterns() Util.open(plugin.dir .. "/README.md") end end, - ["|(%S-)|"] = vim.cmd.help, -- vim help links + ["|(%S-)|"] = function(h) + vim.cmd.help(h) + self:close() + end, ["(https?://%S+)"] = function(url) Util.open(url) end, From 5f316cea4f0b5379e0094d6cfa5e1ee5e279f65a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 20 May 2023 07:27:08 +0000 Subject: [PATCH 141/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index bce0050..b1f2940 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 19 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 20 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 451f217e9b2d71f08bdae0ce5ac7e8e8a6503f48 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 21 May 2023 20:51:41 +0200 Subject: [PATCH 142/815] fix(ui): take border into account for window position. Fixes #812 --- lua/lazy/view/float.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 974fb8e..a7054ae 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -35,7 +35,7 @@ function M:init(opts) self.opts = vim.tbl_deep_extend("force", { size = Config.options.ui.size, style = "minimal", - border = Config.options.ui.border, + border = Config.options.ui.border or "none", zindex = 50, }, opts or {}) @@ -66,6 +66,11 @@ function M:layout() self.win_opts.row = math.floor((vim.o.lines - self.win_opts.height) / 2) self.win_opts.col = math.floor((vim.o.columns - self.win_opts.width) / 2) + if self.opts.border ~= "none" then + self.win_opts.row = self.win_opts.row - 1 + self.win_opts.col = self.win_opts.col - 1 + end + if self.opts.margin then if self.opts.margin.top then self.win_opts.height = self.win_opts.height - self.opts.margin.top From b382495d512fbc6dadbeac8b806efc72db7130e8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 21 May 2023 18:52:18 +0000 Subject: [PATCH 143/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b1f2940..bdce0b7 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 20 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 21 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 8564f6d22b78a4a0fba9811faa556159b6c90a49 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 22 May 2023 14:24:18 +0200 Subject: [PATCH 144/815] feat(plugin): added support for `weak` specs. They will not be included in the final spec if not specified somwhere else --- lua/lazy/core/plugin.lua | 7 +++++++ lua/lazy/types.lua | 1 + 2 files changed, 8 insertions(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index f06a1ff..15d5b2d 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -141,6 +141,13 @@ function Spec:warn(msg) end function Spec:fix_disabled() + -- handle weak plugins + for _, plugin in pairs(self.plugins) do + if plugin.weak and not plugin._.super then + self.plugins[plugin.name] = nil + end + end + ---@type table plugin to parent plugin local dep_of = {} diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 067450a..5b3821c 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -47,6 +47,7 @@ ---@field dir string ---@field enabled? boolean|(fun():boolean) ---@field cond? boolean|(fun():boolean) +---@field weak? boolean If set, then this plugin will not be added unless it is added somewhere else ---@field lazy? boolean ---@field priority? number Only useful for lazy=false plugins to force loading certain plugins first. Default priority is 50 ---@field dev? boolean If set, then link to the respective folder under your ~/projects From cd3802a54b8d4d3c2d1f9504b86d3a6bf190d9c8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 22 May 2023 12:25:06 +0000 Subject: [PATCH 145/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index bdce0b7..bf1bf52 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 21 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 22 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From af39d61d3f32683b6e9962d64ab269330b456172 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 22 May 2023 14:31:23 +0200 Subject: [PATCH 146/815] fix: better weak handling --- lua/lazy/core/plugin.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 15d5b2d..0f714f8 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -141,9 +141,14 @@ function Spec:warn(msg) end function Spec:fix_disabled() + ---@param plugin LazyPlugin + local function all_weak(plugin) + return (not plugin) or (rawget(plugin, "weak") and all_weak(plugin._.super)) + end + -- handle weak plugins for _, plugin in pairs(self.plugins) do - if plugin.weak and not plugin._.super then + if plugin.weak and all_weak(plugin) then self.plugins[plugin.name] = nil end end From 8cd4a596745f9e617233e80f24e8152fa72ef186 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 14:37:25 +0200 Subject: [PATCH 147/815] chore(main): release 9.18.0 (#809) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 14 ++++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fe0414..17658a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [9.18.0](https://github.com/folke/lazy.nvim/compare/v9.17.0...v9.18.0) (2023-05-22) + + +### Features + +* **plugin:** added support for `weak` specs. They will not be included in the final spec if not specified somwhere else ([8564f6d](https://github.com/folke/lazy.nvim/commit/8564f6d22b78a4a0fba9811faa556159b6c90a49)) + + +### Bug Fixes + +* better weak handling ([af39d61](https://github.com/folke/lazy.nvim/commit/af39d61d3f32683b6e9962d64ab269330b456172)) +* **ui:** close ui when opening a help file. Fixes [#808](https://github.com/folke/lazy.nvim/issues/808) ([cc7a764](https://github.com/folke/lazy.nvim/commit/cc7a764aecec11c9598ccd442a6879eed4e85558)) +* **ui:** take border into account for window position. Fixes [#812](https://github.com/folke/lazy.nvim/issues/812) ([451f217](https://github.com/folke/lazy.nvim/commit/451f217e9b2d71f08bdae0ce5ac7e8e8a6503f48)) + ## [9.17.0](https://github.com/folke/lazy.nvim/compare/v9.16.1...v9.17.0) (2023-05-18) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f4f2240..172d827 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.17.0" -- x-release-please-version +M.version = "9.18.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 9177778891ecdf02562eeaa1a26b829e4b62bc16 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 22 May 2023 14:53:30 +0200 Subject: [PATCH 148/815] fix(plugin): rename weak => optional. Makes more sense :) --- lua/lazy/core/plugin.lua | 8 ++++---- lua/lazy/types.lua | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 0f714f8..00e5ecf 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -142,13 +142,13 @@ end function Spec:fix_disabled() ---@param plugin LazyPlugin - local function all_weak(plugin) - return (not plugin) or (rawget(plugin, "weak") and all_weak(plugin._.super)) + local function all_optional(plugin) + return (not plugin) or (rawget(plugin, "optional") and all_optional(plugin._.super)) end - -- handle weak plugins + -- handle optional plugins for _, plugin in pairs(self.plugins) do - if plugin.weak and all_weak(plugin) then + if plugin.optional and all_optional(plugin) then self.plugins[plugin.name] = nil end end diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 5b3821c..df8c19d 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -47,7 +47,7 @@ ---@field dir string ---@field enabled? boolean|(fun():boolean) ---@field cond? boolean|(fun():boolean) ----@field weak? boolean If set, then this plugin will not be added unless it is added somewhere else +---@field optional? boolean If set, then this plugin will not be added unless it is added somewhere else ---@field lazy? boolean ---@field priority? number Only useful for lazy=false plugins to force loading certain plugins first. Default priority is 50 ---@field dev? boolean If set, then link to the respective folder under your ~/projects From 6610b15dfd76f7992423916e2b87f031881d7b25 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 14:58:33 +0200 Subject: [PATCH 149/815] chore(main): release 9.18.1 (#815) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17658a6..fe19d23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.18.1](https://github.com/folke/lazy.nvim/compare/v9.18.0...v9.18.1) (2023-05-22) + + +### Bug Fixes + +* **plugin:** rename weak => optional. Makes more sense :) ([9177778](https://github.com/folke/lazy.nvim/commit/9177778891ecdf02562eeaa1a26b829e4b62bc16)) + ## [9.18.0](https://github.com/folke/lazy.nvim/compare/v9.17.0...v9.18.0) (2023-05-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 172d827..3f3fc24 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.18.0" -- x-release-please-version +M.version = "9.18.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From f125a7d333472ada244b4564805ba11be3c269a9 Mon Sep 17 00:00:00 2001 From: tzachar Date: Tue, 23 May 2023 09:43:27 +0300 Subject: [PATCH 150/815] fix(commands): completion error (#819) When Lazy commands are searched in command line mode, completion fails horribly (sometime crashing nvim entirely) when the partial string to complete contains non-escape characters. For example, running `:Lazy up[` results in a crash. The fix is to instruct string.find to perform a literal search, treating the string to search not as a regular expression. --- lua/lazy/view/commands.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index 0476400..3b81e6b 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -112,7 +112,7 @@ function M.setup() ---@param key string return vim.tbl_filter(function(key) - return key:find(prefix) == 1 + return key:find(prefix, 1, true) == 1 end, vim.tbl_keys(M.commands)) end, }) From b1ad64a73e33421f9ffd62be0de3070dadbf7cf1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 23 May 2023 06:44:18 +0000 Subject: [PATCH 151/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index bf1bf52..a51115f 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 22 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 23 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From b0aa5348d8c5547a23f276251fcc3aa676f41d27 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 23 May 2023 08:57:53 +0200 Subject: [PATCH 152/815] docs: added docs on optional --- README.md | 1 + lua/lazy/core/plugin.lua | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7292e4a..9ce2c59 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ require("lazy").setup({ | **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | | **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | | **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | +| **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins | ### Lazy Loading diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 00e5ecf..76b245d 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -12,16 +12,19 @@ M.loading = false ---@field modules string[] ---@field notifs {msg:string, level:number, file?:string}[] ---@field importing? string +---@field optional? boolean local Spec = {} M.Spec = Spec ---@param spec? LazySpec -function Spec.new(spec) +---@param opts? {optional?:boolean} +function Spec.new(spec, opts) local self = setmetatable({}, { __index = Spec }) self.plugins = {} self.disabled = {} self.modules = {} self.notifs = {} + self.optional = opts and opts.optional if spec then self:parse(spec) end @@ -141,15 +144,17 @@ function Spec:warn(msg) end function Spec:fix_disabled() - ---@param plugin LazyPlugin - local function all_optional(plugin) - return (not plugin) or (rawget(plugin, "optional") and all_optional(plugin._.super)) - end + if not self.optional then + ---@param plugin LazyPlugin + local function all_optional(plugin) + return (not plugin) or (rawget(plugin, "optional") and all_optional(plugin._.super)) + end - -- handle optional plugins - for _, plugin in pairs(self.plugins) do - if plugin.optional and all_optional(plugin) then - self.plugins[plugin.name] = nil + -- handle optional plugins + for _, plugin in pairs(self.plugins) do + if plugin.optional and all_optional(plugin) then + self.plugins[plugin.name] = nil + end end end From 72c3592e040f2b686a09bf70e9870609011f24a7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 23 May 2023 06:58:38 +0000 Subject: [PATCH 153/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index a51115f..b9df689 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -196,6 +196,13 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* loading certain plugins first. Default priority is 50. It’s recommended to set this to a high number for colorschemes. + + optional boolean? When a spec is tagged optional, it will only be + included in the final spec, when the same plugin has + been specified at least once somewhere else without + optional. This is mainly useful for Neovim distros, + to allow setting options on plugins that may/may not + be part of the user’s plugins -------------------------------------------------------------------------------------------------------------------------------- LAZY LOADING ~ From 761b8388af5bcb451e30d886163fcd129278e1d1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 23 May 2023 09:01:50 +0200 Subject: [PATCH 154/815] chore(main): release 9.18.2 (#820) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe19d23..d6d86b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.18.2](https://github.com/folke/lazy.nvim/compare/v9.18.1...v9.18.2) (2023-05-23) + + +### Bug Fixes + +* **commands:** completion error ([#819](https://github.com/folke/lazy.nvim/issues/819)) ([f125a7d](https://github.com/folke/lazy.nvim/commit/f125a7d333472ada244b4564805ba11be3c269a9)) + ## [9.18.1](https://github.com/folke/lazy.nvim/compare/v9.18.0...v9.18.1) (2023-05-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 3f3fc24..1b166a2 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.18.1" -- x-release-please-version +M.version = "9.18.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 49a7f21ee37b4f8a13f6774b17ddfcae5e4f41b0 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 25 May 2023 08:07:44 +0200 Subject: [PATCH 155/815] feat(git): change default log args to last 8 --- lua/lazy/core/config.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 1b166a2..1d8abc4 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -21,7 +21,7 @@ M.defaults = { git = { -- defaults for the `Lazy log` command -- log = { "-10" }, -- show the last 10 commits - log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show commits from the last 3 days timeout = 120, -- kill processes that take more than 2 minutes url_format = "https://github.com/%s.git", -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, From 57062f3a09cad6dd5fe745389ad9f8421e3bdcd2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 25 May 2023 08:09:19 +0200 Subject: [PATCH 156/815] feat(plugin): trigger LazyPlugins after loading plugin specs --- lua/lazy/core/plugin.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 76b245d..840a343 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -423,6 +423,7 @@ function M.load() M.update_state() Util.track() M.loading = false + vim.api.nvim_exec_autocmds("User", { pattern = "LazyPlugins", modeline = false }) end -- Finds the plugin that has this path From 32170a88916e0f18ffaf1c32b222a5e2216bdb0e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 25 May 2023 08:10:08 +0200 Subject: [PATCH 157/815] fix(plugin): fix url based plugin name and added extra safety checks. Fixes #824 --- lua/lazy/core/plugin.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 840a343..c53ee72 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -49,6 +49,7 @@ end -- PERF: optimized code to get package name without using lua patterns function Spec.get_name(pkg) local name = pkg:sub(-4) == ".git" and pkg:sub(1, -5) or pkg + name = name:sub(-1) == "/" and name:sub(1, -2) or name local slash = name:reverse():find("/", 1, true) --[[@as number?]] return slash and name:sub(#name - slash + 2) or pkg:gsub("%W+", "_") end @@ -109,6 +110,11 @@ function Spec:add(plugin, results, is_dep) return end + if not plugin.name or plugin.name == "" then + self:error("Plugin spec " .. vim.inspect(plugin) .. " has no name") + return + end + if type(plugin.config) == "table" then self:warn( "{" .. plugin.name .. "}: setting a table to `Plugin.config` is deprecated. Please use `Plugin.opts` instead" From 721e37b4ddd55203b2ae70d56180109dddab4028 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 25 May 2023 06:11:00 +0000 Subject: [PATCH 158/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b9df689..0e55b81 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 23 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 25 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From c325c50ba42572b25c08330ea10ae4743ee69280 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 25 May 2023 08:25:34 +0200 Subject: [PATCH 159/815] fix(plugin): check that import is a string. See #825 --- lua/lazy/core/plugin.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index c53ee72..eb132d3 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -265,6 +265,9 @@ function Spec:import(spec) if spec.import == "lazy" then return self:error("You can't name your plugins module `lazy`.") end + if type(spec.import) ~= "string" then + return self:error("Invalid import spec. `import` should be a string: " .. vim.inspect(spec)) + end if vim.tbl_contains(self.modules, spec.import) then return end From 67ae8bbbe3985e380b98abeaf6c567c422b29746 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 25 May 2023 09:13:34 +0200 Subject: [PATCH 160/815] chore(main): release 9.19.0 (#826) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 14 ++++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6d86b0..bcf4803 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [9.19.0](https://github.com/folke/lazy.nvim/compare/v9.18.2...v9.19.0) (2023-05-25) + + +### Features + +* **git:** change default log args to last 8 ([49a7f21](https://github.com/folke/lazy.nvim/commit/49a7f21ee37b4f8a13f6774b17ddfcae5e4f41b0)) +* **plugin:** trigger LazyPlugins after loading plugin specs ([57062f3](https://github.com/folke/lazy.nvim/commit/57062f3a09cad6dd5fe745389ad9f8421e3bdcd2)) + + +### Bug Fixes + +* **plugin:** check that import is a string. See [#825](https://github.com/folke/lazy.nvim/issues/825) ([c325c50](https://github.com/folke/lazy.nvim/commit/c325c50ba42572b25c08330ea10ae4743ee69280)) +* **plugin:** fix url based plugin name and added extra safety checks. Fixes [#824](https://github.com/folke/lazy.nvim/issues/824) ([32170a8](https://github.com/folke/lazy.nvim/commit/32170a88916e0f18ffaf1c32b222a5e2216bdb0e)) + ## [9.18.2](https://github.com/folke/lazy.nvim/compare/v9.18.1...v9.18.2) (2023-05-23) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 1d8abc4..9f3b604 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.18.2" -- x-release-please-version +M.version = "9.19.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 199e1004647895d5cb87911ae65e4f01418abf3b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 27 May 2023 08:45:14 +0200 Subject: [PATCH 161/815] fix(plugin): delay check if plugin ref exists until after loading all plugins. Fixes #833 --- lua/lazy/core/plugin.lua | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index eb132d3..f3e87a6 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -130,9 +130,6 @@ function Spec:add(plugin, results, is_dep) plugin.dependencies = plugin.dependencies and self:normalize(plugin.dependencies, {}, true) or nil if self.plugins[plugin.name] then plugin = self:merge(self.plugins[plugin.name], plugin) - elseif is_ref and not plugin.url then - self:error("Plugin spec for **" .. plugin.name .. "** not found.\n```lua\n" .. vim.inspect(plugin) .. "\n```") - return end self.plugins[plugin.name] = plugin if results then @@ -150,6 +147,12 @@ function Spec:warn(msg) end function Spec:fix_disabled() + for _, plugin in pairs(self.plugins) do + if not plugin.url or not plugin.dir then + self:error("Plugin spec for **" .. plugin.name .. "** not found.\n```lua\n" .. vim.inspect(plugin) .. "\n```") + self.plugins[plugin.name] = nil + end + end if not self.optional then ---@param plugin LazyPlugin local function all_optional(plugin) From 42ff6009f67a712ab4e7c8deedb626f8243a052a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 27 May 2023 08:49:45 +0200 Subject: [PATCH 162/815] fix(plugin): fixup. It's fine that Plugin.url doesn't exist --- lua/lazy/core/plugin.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index f3e87a6..c373f6d 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -148,7 +148,7 @@ end function Spec:fix_disabled() for _, plugin in pairs(self.plugins) do - if not plugin.url or not plugin.dir then + if not plugin.name or not plugin.dir then self:error("Plugin spec for **" .. plugin.name .. "** not found.\n```lua\n" .. vim.inspect(plugin) .. "\n```") self.plugins[plugin.name] = nil end From 41b64eaca2b64220ccfd11aec5e8dc659481f31e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 27 May 2023 06:51:01 +0000 Subject: [PATCH 163/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 0e55b81..c5e79b0 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 25 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 27 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 97c2f8858c43bc9124b8b43369a1a5862deef817 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 27 May 2023 10:03:47 +0200 Subject: [PATCH 164/815] chore(main): release 9.19.1 (#835) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bcf4803..f6066ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [9.19.1](https://github.com/folke/lazy.nvim/compare/v9.19.0...v9.19.1) (2023-05-27) + + +### Bug Fixes + +* **plugin:** delay check if plugin ref exists until after loading all plugins. Fixes [#833](https://github.com/folke/lazy.nvim/issues/833) ([199e100](https://github.com/folke/lazy.nvim/commit/199e1004647895d5cb87911ae65e4f01418abf3b)) +* **plugin:** fixup. It's fine that Plugin.url doesn't exist ([42ff600](https://github.com/folke/lazy.nvim/commit/42ff6009f67a712ab4e7c8deedb626f8243a052a)) + ## [9.19.0](https://github.com/folke/lazy.nvim/compare/v9.18.2...v9.19.0) (2023-05-25) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9f3b604..9b6cd23 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -151,7 +151,7 @@ M.defaults = { debug = false, } -M.version = "9.19.0" -- x-release-please-version +M.version = "9.19.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 9dce0816f15f478c864c65fce0cd55f145faad03 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 27 May 2023 14:28:09 +0200 Subject: [PATCH 165/815] feat(ui): added support for setting a title of the lazy window. Fixes #814 --- README.md | 7 +++++-- lua/lazy/core/config.lua | 2 ++ lua/lazy/view/float.lua | 4 ++++ lua/lazy/view/init.lua | 5 ++++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9ce2c59..f948295 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ require("lazy").setup({ | **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | | **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | | **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | -| **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins | +| **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins | ### Lazy Loading @@ -310,7 +310,7 @@ return { git = { -- defaults for the `Lazy log` command -- log = { "-10" }, -- show the last 10 commits - log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show commits from the last 3 days timeout = 120, -- kill processes that take more than 2 minutes url_format = "https://github.com/%s.git", -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, @@ -337,6 +337,8 @@ return { wrap = true, -- wrap the lines in the ui -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. border = "none", + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" icons = { cmd = " ", config = "", @@ -757,6 +759,7 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori | **LazyDir** | **_@text.reference_** | directory | | **LazyH1** | **_IncSearch_** | home button | | **LazyH2** | **_Bold_** | titles | +| **LazyLocal** | **_Constant_** | | | **LazyNoCond** | **_DiagnosticWarn_** | unloaded icon for a plugin where `cond()` was false | | **LazyNormal** | **_NormalFloat_** | | | **LazyProgressDone** | **_Constant_** | progress bar done | diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9b6cd23..254510d 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -48,6 +48,8 @@ M.defaults = { wrap = true, -- wrap the lines in the ui -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. border = "none", + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" icons = { cmd = " ", config = "", diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index a7054ae..55bf750 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -9,6 +9,8 @@ local ViewConfig = require("lazy.view.config") ---@field zindex? number ---@field style? "" | "minimal" ---@field border? "none" | "single" | "double" | "rounded" | "solid" | "shadow" +---@field title? string +---@field title_pos? "center" | "left" | "right" ---@class LazyFloat ---@field buf number @@ -50,6 +52,8 @@ function M:init(opts) border = self.opts.border, zindex = self.opts.zindex, noautocmd = true, + title = self.opts.title, + title_pos = self.opts.title and self.opts.title_pos or nil, } self:mount() self:on_key(ViewConfig.keys.close, self.close) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index ea35347..12f8e48 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -50,7 +50,10 @@ end function M.create() local self = setmetatable({}, { __index = setmetatable(M, { __index = Float }) }) ---@cast self LazyView - Float.init(self) + Float.init(self, { + title = Config.options.ui.title, + title_pos = Config.options.ui.title_pos, + }) if Config.options.ui.wrap then vim.wo[self.win].wrap = true From ae7de6b56b525fd081452365cbfbff876baad97f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 27 May 2023 12:28:58 +0000 Subject: [PATCH 166/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c5e79b0..96110b0 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -406,7 +406,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* git = { -- defaults for the `Lazy log` command -- log = { "-10" }, -- show the last 10 commits - log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show commits from the last 3 days timeout = 120, -- kill processes that take more than 2 minutes url_format = "https://github.com/%s.git", -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, @@ -433,6 +433,8 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* wrap = true, -- wrap the lines in the ui -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. border = "none", + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" icons = { cmd = " ", config = "", @@ -885,6 +887,8 @@ Click to see all highlight groups ~ LazyH2 Bold titles + LazyLocal Constant + LazyNoCond DiagnosticWarn unloaded icon for a plugin where cond() was false From 7f34cb892b985d0aecef09412380420961721786 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 27 May 2023 14:36:14 +0200 Subject: [PATCH 167/815] chore(main): release 9.20.0 (#836) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6066ea..68d705b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.20.0](https://github.com/folke/lazy.nvim/compare/v9.19.1...v9.20.0) (2023-05-27) + + +### Features + +* **ui:** added support for setting a title of the lazy window. Fixes [#814](https://github.com/folke/lazy.nvim/issues/814) ([9dce081](https://github.com/folke/lazy.nvim/commit/9dce0816f15f478c864c65fce0cd55f145faad03)) + ## [9.19.1](https://github.com/folke/lazy.nvim/compare/v9.19.0...v9.19.1) (2023-05-27) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 254510d..20a986f 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.19.1" -- x-release-please-version +M.version = "9.20.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From d8a5829fdad1d435fd74d65743df5d53d4a845d2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 27 May 2023 15:19:11 +0200 Subject: [PATCH 168/815] feat(loader): when reloading, always re-source loaded vimscript files. See #445 --- lua/lazy/core/loader.lua | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 32067b3..69f2b3e 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -254,8 +254,27 @@ function M.reload(plugin) end end + -- reload any vimscript files for this plugin + local scripts = vim.fn.getscriptinfo({ name = ".vim" }) + local loaded_scripts = {} + for _, s in ipairs(scripts) do + ---@type string + local path = s.name + if + path:sub(-4) == ".vim" + and path:find(plugin.dir, 1, true) == 1 + and not path:find("/plugin/", 1, true) + and not path:find("/ftplugin/", 1, true) + then + loaded_scripts[#loaded_scripts + 1] = path + end + end + if load then M.load(plugin, { start = "reload" }) + for _, s in ipairs(loaded_scripts) do + M.source(s) + end end end From a6c8f22362dccf5416ccb108f201e9f1ddda43f1 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 27 May 2023 15:19:50 +0200 Subject: [PATCH 169/815] feat(commands): added highly experimental `Lazy reload ...` command. See #445 --- lua/lazy/core/loader.lua | 12 ++++++++++-- lua/lazy/view/commands.lua | 6 ++++++ lua/lazy/view/config.lua | 8 +++++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 69f2b3e..25f1c57 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -227,10 +227,18 @@ function M.deactivate(plugin) end --- reload a plugin ----@param plugin LazyPlugin +---@param plugin LazyPlugin|string function M.reload(plugin) + if type(plugin) == "string" then + plugin = Config.plugins[plugin] + end + + if not plugin then + error("Plugin not found") + end + + local load = plugin._.loaded ~= nil M.deactivate(plugin) - local load = false -- plugin._.loaded ~= nil -- enable handlers Handler.enable(plugin) diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index 3b81e6b..1fa7cc1 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -53,6 +53,12 @@ M.commands = { -- when a command is executed with a bang, wait will be set require("lazy.core.loader").load(opts.plugins, { cmd = "Lazy load" }, { force = opts.wait }) end, + reload = function(opts) + for _, plugin in pairs(opts.plugins) do + Util.warn("Reloading **" .. plugin.name .. "**") + require("lazy.core.loader").reload(plugin) + end + end, log = Manage.log, build = Manage.build, clean = Manage.clean, diff --git a/lua/lazy/view/config.lua b/lua/lazy/view/config.lua index 0e7dbf6..cf7df1c 100644 --- a/lua/lazy/view/config.lua +++ b/lua/lazy/view/config.lua @@ -143,11 +143,17 @@ M.commands = { }, build = { desc = "Rebuild a plugin", - id = 13, + id = 15, plugins = true, plugins_required = true, key_plugin = "gb", }, + reload = { + desc = "Reload a plugin (experimental!!)", + plugins = true, + plugins_required = true, + id = 16, + }, } return M From efa02ff8d37fe5809ea7826f11730a59d25533ef Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 27 May 2023 16:11:01 +0200 Subject: [PATCH 170/815] fix(ui): make progress bar work again --- lua/lazy/view/text.lua | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lua/lazy/view/text.lua b/lua/lazy/view/text.lua index 614381a..3e83d5a 100644 --- a/lua/lazy/view/text.lua +++ b/lua/lazy/view/text.lua @@ -67,12 +67,16 @@ function Text:render(buf) for _, line in ipairs(self._lines) do local str = (" "):rep(self.padding) + local has_extmark = false for _, segment in ipairs(line) do str = str .. segment.str + if type(segment.hl) == "table" then + has_extmark = true + end end - if str:match("^%s*$") then + if str:match("^%s*$") and not has_extmark then str = "" end table.insert(lines, str) @@ -97,11 +101,11 @@ function Text:render(buf) local extmark_col = extmark.col or col extmark.col = nil - local ok = pcall(vim.api.nvim_buf_set_extmark, buf, Config.ns, l - 1, extmark_col, extmark) + local ok, err = pcall(vim.api.nvim_buf_set_extmark, buf, Config.ns, l - 1, extmark_col, extmark) if not ok then Util.error( "Failed to set extmark. Please report a bug with this info:\n" - .. vim.inspect({ segment = segment, line = line }) + .. vim.inspect({ segment = segment, line = line, error = err }) ) end end From a93d8983c4335b6ae7d6e7d516a191d929186d5b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 27 May 2023 16:14:24 +0200 Subject: [PATCH 171/815] chore(main): release 9.21.0 (#837) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68d705b..c29669b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [9.21.0](https://github.com/folke/lazy.nvim/compare/v9.20.0...v9.21.0) (2023-05-27) + + +### Features + +* **commands:** added highly experimental `Lazy reload ...` command. See [#445](https://github.com/folke/lazy.nvim/issues/445) ([a6c8f22](https://github.com/folke/lazy.nvim/commit/a6c8f22362dccf5416ccb108f201e9f1ddda43f1)) +* **loader:** when reloading, always re-source loaded vimscript files. See [#445](https://github.com/folke/lazy.nvim/issues/445) ([d8a5829](https://github.com/folke/lazy.nvim/commit/d8a5829fdad1d435fd74d65743df5d53d4a845d2)) + + +### Bug Fixes + +* **ui:** make progress bar work again ([efa02ff](https://github.com/folke/lazy.nvim/commit/efa02ff8d37fe5809ea7826f11730a59d25533ef)) + ## [9.20.0](https://github.com/folke/lazy.nvim/compare/v9.19.1...v9.20.0) (2023-05-27) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 20a986f..07261da 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.20.0" -- x-release-please-version +M.version = "9.21.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From fe9fcdb0b93f6072873b9ec652c3f82d04dfd646 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 28 May 2023 10:42:19 +0200 Subject: [PATCH 172/815] docs: added version=false --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f948295..9d9e079 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ require("lazy").setup({ | **branch** | `string?` | Branch of the repository | | **tag** | `string?` | Tag 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?` or `false` to override the default | 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 | | `submodules` | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | | **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | From b4e520579b1b1a31d5e4f3f632a4e54cef35d2a6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 28 May 2023 08:43:07 +0000 Subject: [PATCH 173/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 96110b0..c303b3b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 27 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 28 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -168,7 +168,7 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* commit string? Commit of the repository - version string? Version to use from the repository. Full Semver + version string? or false to override the default Version to use from the repository. Full Semver ranges are supported pin boolean? When true, this plugin will not be included in From 36a91320f9ff4f877f09ac3a52c6a26860da047a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 28 May 2023 11:02:35 +0200 Subject: [PATCH 174/815] fix(loader): don't run ftdetect twice for paths already on the rtp during startup. Fixes #839 --- lua/lazy/core/loader.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 25f1c57..3065040 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -122,6 +122,9 @@ function M.startup() Util.track({ start = "rtp plugins" }) for _, path in ipairs(rtp) do if not path:find("after/?$") then + -- these paths don't will already have their ftdetect ran, + -- by sourcing filetype.lua above, so skip them + M.did_ftdetect[path] = true M.packadd(path) end end From ebdd0499551765e6a7aba220cc8ae4e0cdb6be69 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 28 May 2023 12:55:02 +0200 Subject: [PATCH 175/815] chore(main): release 9.21.1 (#840) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c29669b..600ab76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.21.1](https://github.com/folke/lazy.nvim/compare/v9.21.0...v9.21.1) (2023-05-28) + + +### Bug Fixes + +* **loader:** don't run ftdetect twice for paths already on the rtp during startup. Fixes [#839](https://github.com/folke/lazy.nvim/issues/839) ([36a9132](https://github.com/folke/lazy.nvim/commit/36a91320f9ff4f877f09ac3a52c6a26860da047a)) + ## [9.21.0](https://github.com/folke/lazy.nvim/compare/v9.20.0...v9.21.0) (2023-05-27) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 07261da..514e48a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.21.0" -- x-release-please-version +M.version = "9.21.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From beb5ff7f3fe7b426cc5f2b2308c53866642eb21d Mon Sep 17 00:00:00 2001 From: Zach Himsel Date: Tue, 30 May 2023 10:49:32 -0400 Subject: [PATCH 176/815] docs: Add example for non-headless sync from CLI (#847) --- doc/lazy.nvim.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c303b3b..8b24c00 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -621,6 +621,12 @@ example, if you want to sync lazy from the cmdline, you can use: $ nvim --headless "+Lazy! sync" +qa < +If you want to do the above, but with the full nvim UI (instead of headless): + +>shell + $ nvim "+autocmd User VeryLazy Lazy! sync" +qa +< + `opts` is a table with the following key-values: - **wait**when true, then the call will wait till the operation completed From e6bf3a0d9c4899dcf832270f79bb1cee8fbc506e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 30 May 2023 14:50:20 +0000 Subject: [PATCH 177/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 8b24c00..2f7a6e6 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 28 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 30 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -621,12 +621,6 @@ example, if you want to sync lazy from the cmdline, you can use: $ nvim --headless "+Lazy! sync" +qa < -If you want to do the above, but with the full nvim UI (instead of headless): - ->shell - $ nvim "+autocmd User VeryLazy Lazy! sync" +qa -< - `opts` is a table with the following key-values: - **wait**when true, then the call will wait till the operation completed From 94472b8303f4db496ff1214a73aa8f600e375974 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 3 Jun 2023 10:45:53 +0200 Subject: [PATCH 178/815] feat(float): floats can now be persistent --- lua/lazy/util.lua | 2 +- lua/lazy/view/float.lua | 68 +++++++++++++++++++++++++++++++++++------ lua/lazy/view/init.lua | 1 + 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index b2629b1..11b8182 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -112,7 +112,7 @@ function M.float_term(cmd, opts) once = true, buffer = float.buf, callback = function() - float:close() + float:close({ wipe = true }) vim.cmd.checktime() end, }) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 55bf750..248334e 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -11,6 +11,9 @@ local ViewConfig = require("lazy.view.config") ---@field border? "none" | "single" | "double" | "rounded" | "solid" | "shadow" ---@field title? string ---@field title_pos? "center" | "left" | "right" +---@field persistent? boolean +---@field ft? string +---@field noautocmd? boolean ---@class LazyFloat ---@field buf number @@ -51,7 +54,7 @@ function M:init(opts) style = self.opts.style ~= "" and self.opts.style or nil, border = self.opts.border, zindex = self.opts.zindex, - noautocmd = true, + noautocmd = self.opts.noautocmd, title = self.opts.title, title_pos = self.opts.title and self.opts.title_pos or nil, } @@ -94,27 +97,32 @@ function M:layout() end function M:mount() - if self.opts.file then + if self:buf_valid() then + -- keep existing buffer + self.buf = self.buf + elseif self.opts.file then self.buf = vim.fn.bufadd(self.opts.file) vim.fn.bufload(self.buf) vim.bo[self.buf].modifiable = false elseif self.opts.buf then self.buf = self.opts.buf else - self.buf = vim.api.nvim_create_buf(false, false) + self.buf = vim.api.nvim_create_buf(false, true) end self:layout() self.win = vim.api.nvim_open_win(self.buf, true, self.win_opts) self:focus() - vim.bo[self.buf].buftype = "nofile" + if vim.bo[self.buf].buftype == "" then + vim.bo[self.buf].buftype = "nofile" + end if vim.bo[self.buf].filetype == "" then - vim.bo[self.buf].filetype = "lazy" + vim.bo[self.buf].filetype = self.opts.ft or "lazy" end local function opts() - vim.bo[self.buf].bufhidden = "wipe" + vim.bo[self.buf].bufhidden = self.opts.persistent and "hide" or "wipe" vim.wo[self.win].conceallevel = 3 vim.wo[self.win].foldenable = false vim.wo[self.win].spell = false @@ -179,22 +187,64 @@ function M:on_key(key, fn, desc) }) end -function M:close() +---@param opts? {wipe:boolean} +function M:close(opts) local buf = self.buf local win = self.win + local wipe = opts and opts.wipe + if wipe == nil then + wipe = not self.opts.persistent + end + self.win = nil - self.buf = nil + if wipe then + self.buf = nil + end vim.schedule(function() if win and vim.api.nvim_win_is_valid(win) then vim.api.nvim_win_close(win, true) end - if buf and vim.api.nvim_buf_is_valid(buf) then + if wipe and buf and vim.api.nvim_buf_is_valid(buf) then vim.diagnostic.reset(Config.ns, buf) vim.api.nvim_buf_delete(buf, { force = true }) end end) end +function M:win_valid() + return self.win and vim.api.nvim_win_is_valid(self.win) +end + +function M:buf_valid() + return self.buf and vim.api.nvim_buf_is_valid(self.buf) +end + +function M:hide() + if self:win_valid() then + self:close({ wipe = false }) + end +end + +function M:toggle() + if self:win_valid() then + self:hide() + return false + else + self:show() + return true + end +end + +function M:show() + if self:win_valid() then + self:focus() + elseif self:buf_valid() then + self:mount() + else + error("LazyFloat: buffer closed") + end +end + function M:focus() vim.api.nvim_set_current_win(self.win) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 12f8e48..998c531 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -53,6 +53,7 @@ function M.create() Float.init(self, { title = Config.options.ui.title, title_pos = Config.options.ui.title_pos, + noautocmd = true, }) if Config.options.ui.wrap then From 33448b968bda7c2ef36f015bcfd68f481c8158d5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 3 Jun 2023 08:46:32 +0000 Subject: [PATCH 179/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 2f7a6e6..f1be10f 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 May 30 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 03 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 9223c1aa200a8c329053f9e2ca0980ead56059d6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 3 Jun 2023 10:55:15 +0200 Subject: [PATCH 180/815] chore(main): release 9.22.0 (#852) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 600ab76..7d9b040 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.22.0](https://github.com/folke/lazy.nvim/compare/v9.21.1...v9.22.0) (2023-06-03) + + +### Features + +* **float:** floats can now be persistent ([94472b8](https://github.com/folke/lazy.nvim/commit/94472b8303f4db496ff1214a73aa8f600e375974)) + ## [9.21.1](https://github.com/folke/lazy.nvim/compare/v9.21.0...v9.21.1) (2023-05-28) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 514e48a..d9f6600 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.21.1" -- x-release-please-version +M.version = "9.22.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From d65a3d6755bd3f1ca7bc4c15a8acf57687b1ca51 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 3 Jun 2023 13:45:18 +0200 Subject: [PATCH 181/815] fix(keys): replace term codes to calculate ids --- lua/lazy/core/handler/keys.lua | 2 +- tests/handlers/keys_spec.lua | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 tests/handlers/keys_spec.lua diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 73b10b7..cdf2243 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -19,7 +19,7 @@ function M.parse(value) local ret = vim.deepcopy(value) ret = type(ret) == "string" and { ret } or ret --[[@as LazyKeys]] ret.mode = ret.mode or "n" - ret.id = (ret[1] or "") + ret.id = vim.api.nvim_replace_termcodes(ret[1] or "", true, true, true) if ret.mode then local mode = ret.mode if type(mode) == "table" then diff --git a/tests/handlers/keys_spec.lua b/tests/handlers/keys_spec.lua new file mode 100644 index 0000000..6254db8 --- /dev/null +++ b/tests/handlers/keys_spec.lua @@ -0,0 +1,18 @@ +local Keys = require("lazy.core.handler.keys") + +describe("keys", function() + it("parses ids correctly", function() + local tests = { + { "", "", true }, + { "", "", true }, + { "k", "K", false }, + } + for _, test in ipairs(tests) do + if test[3] then + assert.same(Keys.parse(test[1]).id, Keys.parse(test[2]).id) + else + assert.is_not.same(Keys.parse(test[1]).id, Keys.parse(test[2]).id) + end + end + end) +end) From 6ad76ecc263d334d7cb967472fc4e110f3018351 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 3 Jun 2023 13:47:20 +0200 Subject: [PATCH 182/815] chore(main): release 9.22.1 (#853) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d9b040..9a3af1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.22.1](https://github.com/folke/lazy.nvim/compare/v9.22.0...v9.22.1) (2023-06-03) + + +### Bug Fixes + +* **keys:** replace term codes to calculate ids ([d65a3d6](https://github.com/folke/lazy.nvim/commit/d65a3d6755bd3f1ca7bc4c15a8acf57687b1ca51)) + ## [9.22.0](https://github.com/folke/lazy.nvim/compare/v9.21.1...v9.22.0) (2023-06-03) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index d9f6600..5ed9cd0 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.22.0" -- x-release-please-version +M.version = "9.22.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From dbb2b609f66486251b51c79a7a1d275887413e8e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 3 Jun 2023 14:40:14 +0200 Subject: [PATCH 183/815] fix(ui): setup colors when loading a float --- lua/lazy/view/float.lua | 1 + lua/lazy/view/init.lua | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 248334e..cddcfa6 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -37,6 +37,7 @@ end ---@param opts? LazyFloatOptions function M:init(opts) + require("lazy.view.colors").setup() self.opts = vim.tbl_deep_extend("force", { size = Config.options.ui.size, style = "minimal", diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 998c531..b7e7a84 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -65,8 +65,6 @@ function M.create() vim.wo[self.win].wrap = false end - require("lazy.view.colors").setup() - self.state = vim.deepcopy(default_state) self.render = Render.new(self) From f145e6f42a56306c5536e9efbfe41f7efbec285d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 3 Jun 2023 15:39:09 +0200 Subject: [PATCH 184/815] chore(main): release 9.22.2 (#854) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a3af1d..639084b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.22.2](https://github.com/folke/lazy.nvim/compare/v9.22.1...v9.22.2) (2023-06-03) + + +### Bug Fixes + +* **ui:** setup colors when loading a float ([dbb2b60](https://github.com/folke/lazy.nvim/commit/dbb2b609f66486251b51c79a7a1d275887413e8e)) + ## [9.22.1](https://github.com/folke/lazy.nvim/compare/v9.22.0...v9.22.1) (2023-06-03) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 5ed9cd0..6685a52 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.22.1" -- x-release-please-version +M.version = "9.22.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From bc895023573e76f8567d2375bbd3ea8be4f00ca7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 6 Jun 2023 14:29:38 +0200 Subject: [PATCH 185/815] fix(event): dont use autocmd pattern to detect event retriggering. Fixes #858 --- lua/lazy/core/handler/event.lua | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 8c64231..4303d9d 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -28,11 +28,11 @@ function M:_add(value) return end Util.track({ [self.type] = value }) - local groups = M.get_augroups(event, pattern) + local groups = M.get_augroups(event) -- load the plugins Loader.load(self.active[value], { [self.type] = value }) -- check if any plugin created an event handler for this event and fire the group - self:trigger(event, pattern, groups) + self:trigger(event, groups) Util.track() end, }) @@ -45,12 +45,11 @@ end -- Get all augroups for the events ---@param event string ----@param pattern? string -function M.get_augroups(event, pattern) +function M.get_augroups(event) local events = M.trigger_events[event] or { event } ---@type table local groups = {} - for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = events, pattern = pattern })) do + for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = events })) do if autocmd.group then groups[autocmd.group] = true end @@ -61,18 +60,17 @@ end ---@param event string|string[] ---@param pattern? string ---@param groups table -function M:trigger(event, pattern, groups) +function M:trigger(event, groups) local events = M.trigger_events[event] or { event } ---@cast events string[] for _, e in ipairs(events) do - for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = e, pattern = pattern })) do + for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = e })) do if autocmd.event == e and autocmd.group and not groups[autocmd.group] then if Config.options.debug then Util.info({ "# Firing Events", " - **group:** `" .. autocmd.group_name .. "`", " - **event:** " .. autocmd.event, - pattern and (" - **pattern:** " .. pattern), }) end Util.track({ event = autocmd.group_name }) From 27c12ff0a980e5bab982a730158b4220148a54b0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 6 Jun 2023 12:30:22 +0000 Subject: [PATCH 186/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index f1be10f..25cf154 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 03 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 06 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From ae25448d39fb2bdc38a139339233270edec44484 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 6 Jun 2023 15:05:51 +0200 Subject: [PATCH 187/815] Revert "fix(event): dont use autocmd pattern to detect event retriggering. Fixes #858" This reverts commit bc895023573e76f8567d2375bbd3ea8be4f00ca7. --- lua/lazy/core/handler/event.lua | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 4303d9d..8c64231 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -28,11 +28,11 @@ function M:_add(value) return end Util.track({ [self.type] = value }) - local groups = M.get_augroups(event) + local groups = M.get_augroups(event, pattern) -- load the plugins Loader.load(self.active[value], { [self.type] = value }) -- check if any plugin created an event handler for this event and fire the group - self:trigger(event, groups) + self:trigger(event, pattern, groups) Util.track() end, }) @@ -45,11 +45,12 @@ end -- Get all augroups for the events ---@param event string -function M.get_augroups(event) +---@param pattern? string +function M.get_augroups(event, pattern) local events = M.trigger_events[event] or { event } ---@type table local groups = {} - for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = events })) do + for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = events, pattern = pattern })) do if autocmd.group then groups[autocmd.group] = true end @@ -60,17 +61,18 @@ end ---@param event string|string[] ---@param pattern? string ---@param groups table -function M:trigger(event, groups) +function M:trigger(event, pattern, groups) local events = M.trigger_events[event] or { event } ---@cast events string[] for _, e in ipairs(events) do - for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = e })) do + for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = e, pattern = pattern })) do if autocmd.event == e and autocmd.group and not groups[autocmd.group] then if Config.options.debug then Util.info({ "# Firing Events", " - **group:** `" .. autocmd.group_name .. "`", " - **event:** " .. autocmd.event, + pattern and (" - **pattern:** " .. pattern), }) end Util.track({ event = autocmd.group_name }) From f131606190535b0d0b35406e8573b973b48e55b1 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 8 Jun 2023 17:23:02 +0200 Subject: [PATCH 188/815] feat(startup): added data/site to the rtp. Will be used by upcoming treesitter version --- lua/lazy/core/config.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 6685a52..12fa8f7 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -204,6 +204,7 @@ function M.setup(opts) if M.options.performance.rtp.reset then vim.opt.rtp = { vim.fn.stdpath("config"), + vim.fn.stdpath("data") .. "/site", M.me, vim.env.VIMRUNTIME, vim.fn.fnamemodify(vim.v.progpath, ":p:h:h") .. "/lib/nvim", From d1b02c2dda88422ca573f2a1ebdfb213ce0124d6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 8 Jun 2023 15:23:54 +0000 Subject: [PATCH 189/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 25cf154..526dcf6 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 06 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 08 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 6b2311a46a3808e366bb251270f4cc04afb421ed Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 Jun 2023 12:56:48 +0200 Subject: [PATCH 190/815] chore(main): release 9.23.0 (#859) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 639084b..c771d31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [9.23.0](https://github.com/folke/lazy.nvim/compare/v9.22.2...v9.23.0) (2023-06-08) + + +### Features + +* **startup:** added data/site to the rtp. Will be used by upcoming treesitter version ([f131606](https://github.com/folke/lazy.nvim/commit/f131606190535b0d0b35406e8573b973b48e55b1)) + + +### Bug Fixes + +* **event:** dont use autocmd pattern to detect event retriggering. Fixes [#858](https://github.com/folke/lazy.nvim/issues/858) ([bc89502](https://github.com/folke/lazy.nvim/commit/bc895023573e76f8567d2375bbd3ea8be4f00ca7)) + ## [9.22.2](https://github.com/folke/lazy.nvim/compare/v9.22.1...v9.22.2) (2023-06-03) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 12fa8f7..15ce7d0 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.22.2" -- x-release-please-version +M.version = "9.23.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 678179543e0d27650c328d8659f2c2cab4d854ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 9 Jun 2023 10:57:36 +0000 Subject: [PATCH 191/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 526dcf6..dba7c2e 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 08 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 09 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 7f4da7d511b05f4571ea96c67a5988b6389e12e1 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 12 Jun 2023 08:28:10 +0200 Subject: [PATCH 192/815] fix(ui): set wo options with local. don't use `vim.wo`. See #829 --- lua/lazy/util.lua | 14 +++++++++++--- lua/lazy/view/float.lua | 13 +++++++------ lua/lazy/view/init.lua | 9 ++++----- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 11b8182..c5c64a1 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -10,6 +10,14 @@ function M.float(opts) return require("lazy.view.float")(opts) end +function M.wo(win, k, v) + if vim.api.nvim_set_option_value then + vim.api.nvim_set_option_value(k, v, { scope = "local", win = win }) + else + vim.wo[win][k] = v + end +end + function M.open(uri) if M.file_exists(uri) then return M.float({ style = "", file = uri }) @@ -180,9 +188,9 @@ function M.markdown(msg, opts) vim.tbl_deep_extend("force", { title = "lazy.nvim", on_open = function(win) - vim.wo[win].conceallevel = 3 - vim.wo[win].concealcursor = "n" - vim.wo[win].spell = false + M.wo(win, "conceallevel", 3) + M.wo(win, "concealcursor", "n") + M.wo(win, "spell", false) vim.treesitter.start(vim.api.nvim_win_get_buf(win), "markdown") end, diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index cddcfa6..a879640 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -1,5 +1,6 @@ local Config = require("lazy.core.config") local ViewConfig = require("lazy.view.config") +local Util = require("lazy.util") ---@class LazyFloatOptions ---@field buf? number @@ -124,12 +125,12 @@ function M:mount() local function opts() vim.bo[self.buf].bufhidden = self.opts.persistent and "hide" or "wipe" - vim.wo[self.win].conceallevel = 3 - vim.wo[self.win].foldenable = false - vim.wo[self.win].spell = false - vim.wo[self.win].wrap = true - vim.wo[self.win].winhighlight = "Normal:LazyNormal" - vim.wo[self.win].colorcolumn = "" + Util.wo(self.win, "conceallevel", 3) + Util.wo(self.win, "foldenable", false) + Util.wo(self.win, "spell", false) + Util.wo(self.win, "wrap", true) + Util.wo(self.win, "winhighlight", "Normal:LazyNormal") + Util.wo(self.win, "colorcolumn", "") end opts() diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index b7e7a84..93611e2 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -57,12 +57,11 @@ function M.create() }) if Config.options.ui.wrap then - vim.wo[self.win].wrap = true - vim.wo[self.win].linebreak = true - vim.wo[self.win].breakindent = true - -- vim.wo[self.win].breakindentopt = "shift:8" + Util.wo(self.win, "wrap", true) + Util.wo(self.win, "linebreak", true) + Util.wo(self.win, "breakindent", true) else - vim.wo[self.win].wrap = false + Util.wo(self.win, "wrap", false) end self.state = vim.deepcopy(default_state) From 10d4371745f88837c78c8daab00c5be6e48abea4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 12 Jun 2023 06:29:01 +0000 Subject: [PATCH 193/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index dba7c2e..9de69b2 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 09 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 12 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 0bca18de5d005c700c29da580c20c762c2f9e9e0 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 17 Jun 2023 08:37:33 +0200 Subject: [PATCH 194/815] feat: added `Pre` events. Fixes #856. Fixes #877 --- README.md | 6 ++++++ lua/lazy/manage/init.lua | 11 ++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9d9e079..f6cee6b 100644 --- a/README.md +++ b/README.md @@ -575,6 +575,12 @@ The following user events will be triggered: - **LazyClean**: after a clean - **LazyCheck**: after checking for updates - **LazyLog**: after running log +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log - **LazyReload**: triggered by change detection after reloading plugin specs - **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands - **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 34fc065..2c19b64 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -18,6 +18,13 @@ local M = {} function M.run(ropts, opts) opts = opts or {} + local mode = opts.mode + local event = mode and ("Lazy" .. mode:sub(1, 1):upper() .. mode:sub(2)) + + if event then + vim.api.nvim_exec_autocmds("User", { pattern = event .. "Pre", modeline = false }) + end + if opts.plugins then ---@param plugin string|LazyPlugin opts.plugins = vim.tbl_map(function(plugin) @@ -49,9 +56,7 @@ function M.run(ropts, opts) vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) Plugin.update_state() require("lazy.manage.checker").fast_check({ report = false }) - local mode = opts.mode - if mode then - local event = "Lazy" .. mode:sub(1, 1):upper() .. mode:sub(2) + if event then vim.api.nvim_exec_autocmds("User", { pattern = event, modeline = false }) end end) From 15cdefee465b02ad3492da50e271c8eab56cdbbc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 17 Jun 2023 06:38:16 +0000 Subject: [PATCH 195/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 9de69b2..1ea1acb 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 12 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 17 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -677,6 +677,12 @@ The following user events will be triggered: - **LazyClean**after a clean - **LazyCheck**after checking for updates - **LazyLog**after running log +- **LazySyncPre**before running sync +- **LazyInstallPre**before an install +- **LazyUpdatePre**before an update +- **LazyCleanPre**before a clean +- **LazyCheckPre**before checking for updates +- **LazyLogPre**before running log - **LazyReload**triggered by change detection after reloading plugin specs - **VeryLazy**triggered after `LazyDone` and processing `VimEnter` auto commands - **LazyVimStarted**triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. From 67af46a7f53e06322753cdd8cfd524bbb8ca30a2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 17 Jun 2023 08:40:02 +0200 Subject: [PATCH 196/815] chore(main): release 9.24.0 (#870) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c771d31..9cc66f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [9.24.0](https://github.com/folke/lazy.nvim/compare/v9.23.0...v9.24.0) (2023-06-17) + + +### Features + +* added `Pre` events. Fixes [#856](https://github.com/folke/lazy.nvim/issues/856). Fixes [#877](https://github.com/folke/lazy.nvim/issues/877) ([0bca18d](https://github.com/folke/lazy.nvim/commit/0bca18de5d005c700c29da580c20c762c2f9e9e0)) + + +### Bug Fixes + +* **ui:** set wo options with local. don't use `vim.wo`. See [#829](https://github.com/folke/lazy.nvim/issues/829) ([7f4da7d](https://github.com/folke/lazy.nvim/commit/7f4da7d511b05f4571ea96c67a5988b6389e12e1)) + ## [9.23.0](https://github.com/folke/lazy.nvim/compare/v9.22.2...v9.23.0) (2023-06-08) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 15ce7d0..eccf807 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.23.0" -- x-release-please-version +M.version = "9.24.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 616341372d1908bb2a11e3bf9ed55e74bf605e40 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 18 Jun 2023 22:38:05 +0200 Subject: [PATCH 197/815] fix(manage): trigger LazySyncPre. Fixes #881 --- lua/lazy/manage/init.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 2c19b64..05ffa88 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -180,6 +180,8 @@ function M.sync(opts) opts.show = false end + vim.api.nvim_exec_autocmds("User", { pattern = "LazySyncPre", modeline = false }) + local clean_opts = vim.deepcopy(opts) clean_opts.plugins = nil local clean = M.clean(clean_opts) From 3b0632977ec04cb2eb7707cab0ced8e254405cb9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 18 Jun 2023 20:38:52 +0000 Subject: [PATCH 198/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 1ea1acb..d7dc696 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 17 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 18 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 56b1f7715ed536a3e9ebfbf0d26e615d211a0cd8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 19 Jun 2023 08:10:36 +0200 Subject: [PATCH 199/815] fix(debug): show original keymaps instead of ids for the keys handler --- lua/lazy/view/render.lua | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index d5bc9df..9021af2 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -669,6 +669,14 @@ function M:debug() plugins = vim.tbl_values(plugins) table.sort(plugins) self:append("● ", "LazySpecial", { indent = 2 }) + if handler_type == "keys" then + for k, v in pairs(Handler.handlers.keys:values(Config.plugins[plugins[1]])) do + if k == value then + value = v + break + end + end + end self:reason({ [handler_type] = value }) for _, plugin in pairs(plugins) do self:append(" ") From 410a7360c1b8df2053ae7ba906ff74c9072e1505 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 19 Jun 2023 10:21:37 +0200 Subject: [PATCH 200/815] fix(ui): trailing space in button row. Fixes #884 --- lua/lazy/view/render.lua | 43 ++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 9021af2..19a6feb 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -113,30 +113,35 @@ end function M:title() self:nl():nl() - for _, mode in ipairs(ViewConfig.get_commands()) do - if mode.button then - local title = " " .. mode.name:sub(1, 1):upper() .. mode.name:sub(2) .. " (" .. mode.key .. ") " - if mode.name == "home" then - if self.view.state.mode == "home" then - title = " lazy.nvim " .. Config.options.ui.icons.lazy - else - title = " lazy.nvim (H) " - end - end + local modes = vim.tbl_filter(function(c) + return c.button + end, ViewConfig.get_commands()) - if self.view.state.mode == mode.name then - if mode.name == "home" then - self:append(title, "LazyH1", { wrap = true }) - else - self:append(title, "LazyButtonActive", { wrap = true }) - self:highlight({ ["%(.%)"] = "LazySpecial" }) - end + for c, mode in ipairs(modes) do + local title = " " .. mode.name:sub(1, 1):upper() .. mode.name:sub(2) .. " (" .. mode.key .. ") " + if mode.name == "home" then + if self.view.state.mode == "home" then + title = " lazy.nvim " .. Config.options.ui.icons.lazy else - self:append(title, "LazyButton", { wrap = true }) + title = " lazy.nvim (H) " + end + end + + if self.view.state.mode == mode.name then + if mode.name == "home" then + self:append(title, "LazyH1", { wrap = true }) + else + self:append(title, "LazyButtonActive", { wrap = true }) self:highlight({ ["%(.%)"] = "LazySpecial" }) end - self:append(" ") + else + self:append(title, "LazyButton", { wrap = true }) + self:highlight({ ["%(.%)"] = "LazySpecial" }) end + if c == #modes then + break + end + self:append(" ") end self:nl() if self.progress.done < self.progress.total then From bf11e4907bf00a58788053c3fecbbf4b1b63b27b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 19 Jun 2023 08:22:30 +0000 Subject: [PATCH 201/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index d7dc696..bc80956 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 18 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 19 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From c1aad95243f0d180f41348be26b2417547fb168b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 11:28:26 +0200 Subject: [PATCH 202/815] chore(main): release 9.24.1 (#882) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 9 +++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cc66f2..573f6c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## [9.24.1](https://github.com/folke/lazy.nvim/compare/v9.24.0...v9.24.1) (2023-06-19) + + +### Bug Fixes + +* **debug:** show original keymaps instead of ids for the keys handler ([56b1f77](https://github.com/folke/lazy.nvim/commit/56b1f7715ed536a3e9ebfbf0d26e615d211a0cd8)) +* **manage:** trigger LazySyncPre. Fixes [#881](https://github.com/folke/lazy.nvim/issues/881) ([6163413](https://github.com/folke/lazy.nvim/commit/616341372d1908bb2a11e3bf9ed55e74bf605e40)) +* **ui:** trailing space in button row. Fixes [#884](https://github.com/folke/lazy.nvim/issues/884) ([410a736](https://github.com/folke/lazy.nvim/commit/410a7360c1b8df2053ae7ba906ff74c9072e1505)) + ## [9.24.0](https://github.com/folke/lazy.nvim/compare/v9.23.0...v9.24.0) (2023-06-17) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index eccf807..ed1009d 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.24.0" -- x-release-please-version +M.version = "9.24.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 6c42a305b71449d8ef26b39c1f6e0566114c8636 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 22 Jun 2023 10:23:54 +0200 Subject: [PATCH 203/815] docs: make it clear that a plugin is loaded before build. Fixes #888 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f6cee6b..15a3f54 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ require("lazy").setup({ | **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | | **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)`. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | | **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | -| **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 | +| **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. 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 | From ccd96bfa2e2cbae09edcc13fb6695fd0a8680f98 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 22 Jun 2023 08:24:44 +0000 Subject: [PATCH 204/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index bc80956..e51bd9a 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 19 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 22 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -157,7 +157,8 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* automatically. See config() 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 + updated. Before running build, a plugin is first + loaded. 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 From 3867a81bb2e475c93c744ac39ac76d442d85aa1e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 22 Jun 2023 10:47:48 +0200 Subject: [PATCH 205/815] style: better uv annotations --- lua/lazy/manage/process.lua | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index 04b31bb..9b7fef4 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -2,7 +2,7 @@ local Config = require("lazy.core.config") local M = {} ----@type table +---@type table M.running = {} M.signals = { @@ -75,10 +75,10 @@ function M.spawn(cmd, opts) local stderr = assert(uv.new_pipe()) local output = "" - ---@type uv.uv_process_t + ---@type uv_process_t? local handle = nil - ---@type uv.uv_timer_t + ---@type uv_timer_t local timeout local killed = false if opts.timeout then @@ -96,6 +96,7 @@ function M.spawn(cmd, opts) cwd = opts.cwd, env = env_flat, }, function(exit_code, signal) + ---@cast handle uv_process_t M.running[handle] = nil if timeout then timeout:stop() From d7d5842d1c9a566d480db8b4a5aaf00054b99bb5 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 22 Jun 2023 11:04:17 +0200 Subject: [PATCH 206/815] fix(config): on windows default concurrency is now set to 2*available parallelism. See #887 --- lua/lazy/core/config.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index ed1009d..ccad780 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -17,7 +17,7 @@ M.defaults = { -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - concurrency = nil, ---@type number limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.loop.available_parallelism() * 2) or nil, ---@type number limit the maximum amount of concurrent tasks git = { -- defaults for the `Lazy log` command -- log = { "-10" }, -- show the last 10 commits From b7043f2983d7aead78ca902f3f2053907081859a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 22 Jun 2023 11:17:54 +0200 Subject: [PATCH 207/815] chore(main): release 9.24.2 (#890) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 573f6c1..7370853 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.24.2](https://github.com/folke/lazy.nvim/compare/v9.24.1...v9.24.2) (2023-06-22) + + +### Bug Fixes + +* **config:** on windows default concurrency is now set to 2*available parallelism. See [#887](https://github.com/folke/lazy.nvim/issues/887) ([d7d5842](https://github.com/folke/lazy.nvim/commit/d7d5842d1c9a566d480db8b4a5aaf00054b99bb5)) + ## [9.24.1](https://github.com/folke/lazy.nvim/compare/v9.24.0...v9.24.1) (2023-06-19) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index ccad780..6935bb5 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.24.1" -- x-release-please-version +M.version = "9.24.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 24803fcbe3fe2c84300903278b7445cfb2e54deb Mon Sep 17 00:00:00 2001 From: Mayrixon Date: Mon, 26 Jun 2023 06:54:12 +0100 Subject: [PATCH 208/815] fix(health): false warning when checking plugins configured with 'optional' key (#897) --- lua/lazy/health.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index f0ccb22..8fc6e95 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -127,6 +127,7 @@ M.valid = { "main", "module", "name", + "optional", "opts", "pin", "priority", From 4c8b625bc873ca76b76eee0c28c98f1f7148f17f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 26 Jun 2023 05:55:00 +0000 Subject: [PATCH 209/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index e51bd9a..f139c9c 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 22 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 26 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From d5c31f1ed7dcceb20a04a5dfc8d02f440122177c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 30 Jun 2023 18:08:52 +0200 Subject: [PATCH 210/815] style: lua annotations --- lua/lazy/manage/reloader.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lua/lazy/manage/reloader.lua b/lua/lazy/manage/reloader.lua index b6e1f1e..6938231 100644 --- a/lua/lazy/manage/reloader.lua +++ b/lua/lazy/manage/reloader.lua @@ -5,10 +5,10 @@ local Loader = require("lazy.core.loader") local M = {} ----@type table +---@type table M.files = {} ----@type vim.loop.Timer +---@type uv_timer_t M.timer = nil function M.enable() @@ -16,7 +16,7 @@ function M.enable() M.timer:stop() end if #Config.spec.modules > 0 then - M.timer = vim.loop.new_timer() + M.timer = assert(vim.loop.new_timer()) M.check(true) M.timer:start(2000, 2000, M.check) end @@ -29,8 +29,8 @@ function M.disable() end end ----@param h1 vim.loop.Stat ----@param h2 vim.loop.Stat +---@param h1 uv.aliases.fs_stat_table +---@param h2 uv.aliases.fs_stat_table function M.eq(h1, h2) return h1 and h2 and h1.size == h2.size and h1.mtime.sec == h2.mtime.sec and h1.mtime.nsec == h2.mtime.nsec end From 2772cc587ed2153043676d95f0d75e791f4134cf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 30 Jun 2023 16:11:15 +0000 Subject: [PATCH 211/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index f139c9c..ba139a6 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 26 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 30 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 4c26421785be8c49f1d8eaa5bdb55b73c7be5127 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 30 Jun 2023 18:22:39 +0200 Subject: [PATCH 212/815] feat(build): added support for build.lua, build/init.lua (#903) --- lua/lazy/manage/task/plugin.lua | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index 9e6d84a..00dd262 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -4,13 +4,23 @@ local Loader = require("lazy.core.loader") ---@type table local M = {} +---@param plugin LazyPlugin +local function get_build_file(plugin) + for _, path in ipairs({ "build.lua", "build/init.lua" }) do + path = plugin.dir .. "/" .. path + if Util.file_exists(path) then + return path + end + end +end + M.build = { ---@param opts? {force:boolean} skip = function(plugin, opts) if opts and opts.force then return false end - return not (plugin._.dirty and plugin.build) + return not (plugin._.dirty and (plugin.build or get_build_file(plugin))) end, run = function(self) vim.cmd([[silent! runtime plugin/rplugin.vim]]) @@ -18,6 +28,20 @@ M.build = { Loader.load(self.plugin, { task = "build" }) local builders = self.plugin.build + + local build_file = get_build_file(self.plugin) + if build_file then + if builders then + Util.warn( + ("Plugin **%s** provides its own build script.\nPlease remove the `build` option from the plugin's spec"):format( + self.plugin.name + ) + ) + end + builders = function() + Loader.source(build_file) + end + end if builders then builders = type(builders) == "table" and builders or { builders } ---@cast builders (string|fun(LazyPlugin))[] From 2ea3c54b5f3d079e9aae10411e672fb306c55481 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 30 Jun 2023 18:28:29 +0200 Subject: [PATCH 213/815] docs: added docs about new build.lua --- README.md | 65 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 15a3f54..8610761 100644 --- a/README.md +++ b/README.md @@ -79,35 +79,35 @@ 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 | -| **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` | -| **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 included in the spec | -| **cond** | `boolean?` or `fun(LazyPlugin):boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | -| **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | -| **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | -| **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | -| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)`. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | -| **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | -| **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. 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 | -| **version** | `string?` or `false` to override the default | 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 | -| `submodules` | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | -| **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | -| **cmd** | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]` | Lazy-load on command | -| **ft** | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]` | Lazy-load on filetype | -| **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | -| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | -| **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | -| **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins | +| 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 | +| **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` | +| **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 included in the spec | +| **cond** | `boolean?` or `fun(LazyPlugin):boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | +| **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | +| **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | +| **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | +| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)`. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | +| **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | +| **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. 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. Some plugins provide their own `build.lua` which is automatically used by lazy. So no need to specify a build step for those plugins. | +| **branch** | `string?` | Branch of the repository | +| **tag** | `string?` | Tag of the repository | +| **commit** | `string?` | Commit of the repository | +| **version** | `string?` or `false` to override the default | 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 | +| `submodules` | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | +| **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | +| **cmd** | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]` | Lazy-load on command | +| **ft** | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]` | Lazy-load on filetype | +| **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | +| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | +| **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | +| **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins | ### Lazy Loading @@ -790,6 +790,13 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori +## 📚 Plugin Authors + +If your plugin needs a build step, you can create a file `build.lua` or `build/init.lua` +in the root of your repo. This file will be loaded when the plugin is installed or updated. + +This makes it easier for users, so they no longer need to specify a `build` command. + ## 📦 Other Neovim Plugin Managers in Lua - [packer.nvim](https://github.com/wbthomason/packer.nvim) From d54ae0b96d60ff07f5774a431406b33a17491794 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 30 Jun 2023 16:29:13 +0000 Subject: [PATCH 214/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 78 +++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index ba139a6..51c9d09 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -18,6 +18,7 @@ Table of Contents *lazy.nvim-table-of-contents* - Migration Guide |lazy.nvim-lazy.nvim-migration-guide| - Uninstalling |lazy.nvim-lazy.nvim-uninstalling| - Highlight Groups |lazy.nvim-lazy.nvim-highlight-groups| + - Plugin Authors |lazy.nvim-lazy.nvim-plugin-authors| - Other Neovim Plugin Managers in Lua|lazy.nvim-lazy.nvim-other-neovim-plugin-managers-in-lua| ============================================================================== @@ -102,9 +103,9 @@ It is recommended to run `:checkhealth lazy` after installation. PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* - -------------------------------------------------------------------------------------------------------------------------------- + ---------------------------------------------------------------------------------------------------------------------------------- Property Type Description - -------------- ------------------------------------------------------------ ---------------------------------------------------- + -------------- ------------------------------------------------------------ ------------------------------------------------------ [1] string? Short plugin url. Will be expanded using config.git.url_format @@ -112,40 +113,40 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* 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 - 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 included in the spec cond boolean? or fun(LazyPlugin):boolean When false, or if the function returns false, then - this plugin will not be loaded. Useful to disable - some plugins in vscode, or firenvim for example. + this plugin will not be loaded. Useful to disable some + plugins in vscode, or firenvim for example. - dependencies LazySpec[] A list of plugin names or plugin specs that should - be loaded when the plugin loads. Dependencies are - always lazy-loaded unless specified otherwise. When - specifying a name, make sure the plugin spec has - been defined somewhere else. + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When + specifying a name, make sure the plugin spec has been + defined somewhere else. init fun(LazyPlugin) init functions are always executed during startup opts table or fun(LazyPlugin, opts:table) opts should be a table (will be merged with parent specs), return a table (replaces parent specs) or - should change a table. The table will be passed to - the Plugin.config() function. Setting this value - will imply Plugin.config() + should change a table. The table will be passed to the + Plugin.config() function. Setting this value will + imply Plugin.config() - config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The - default implementation will automatically run + config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The default + implementation will automatically run require(MAIN).setup(opts). Lazy uses several heuristics to determine the plugin’s MAIN module automatically based on the plugin’s name. See also @@ -160,8 +161,10 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* updated. Before running build, a plugin is first loaded. 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 + You can also specify a list to executed multiple build + commands. Some plugins provide their own build.lua + which is automatically used by lazy. So no need to + specify a build step for those plugins. branch string? Branch of the repository @@ -169,11 +172,10 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* commit string? Commit of the repository - version string? or false to override the default Version to use from the repository. Full Semver - ranges are supported + version string? or false to override the default Version to use from the repository. Full 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 submodules boolean? When false, git submodules will not be fetched. Defaults to true @@ -194,17 +196,17 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* required somewhere priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is - 50. It’s recommended to set this to a high number - for colorschemes. + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. optional boolean? When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without - optional. This is mainly useful for Neovim distros, - to allow setting options on plugins that may/may not - be part of the user’s plugins - -------------------------------------------------------------------------------------------------------------------------------- + optional. This is mainly useful for Neovim distros, to + allow setting options on plugins that may/may not be + part of the user’s plugins + ---------------------------------------------------------------------------------------------------------------------------------- LAZY LOADING ~ @@ -936,6 +938,16 @@ Click to see all highlight groups ~ LazyValue _@string_ valueof a property --------------------------------------------------------------------------------- +PLUGIN AUTHORS *lazy.nvim-lazy.nvim-plugin-authors* + +If your plugin needs a build step, you can create a file `build.lua` or +`build/init.lua` in the root of your repo. This file will be loaded when the +plugin is installed or updated. + +This makes it easier for users, so they no longer need to specify a `build` +command. + + OTHER NEOVIM PLUGIN MANAGERS IN LUA*lazy.nvim-lazy.nvim-other-neovim-plugin-managers-in-lua* - packer.nvim From de0a911ad97e273edb6e3890ddb1aac59e2d0fb4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 30 Jun 2023 18:30:15 +0200 Subject: [PATCH 215/815] chore(main): release 9.25.0 (#898) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7370853..a6d9c91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [9.25.0](https://github.com/folke/lazy.nvim/compare/v9.24.2...v9.25.0) (2023-06-30) + + +### Features + +* **build:** added support for build.lua, build/init.lua ([#903](https://github.com/folke/lazy.nvim/issues/903)) ([4c26421](https://github.com/folke/lazy.nvim/commit/4c26421785be8c49f1d8eaa5bdb55b73c7be5127)) + + +### Bug Fixes + +* **health:** false warning when checking plugins configured with 'optional' key ([#897](https://github.com/folke/lazy.nvim/issues/897)) ([24803fc](https://github.com/folke/lazy.nvim/commit/24803fcbe3fe2c84300903278b7445cfb2e54deb)) + ## [9.24.2](https://github.com/folke/lazy.nvim/compare/v9.24.1...v9.24.2) (2023-06-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 6935bb5..b655b9b 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -153,7 +153,7 @@ M.defaults = { debug = false, } -M.version = "9.24.2" -- x-release-please-version +M.version = "9.25.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 189371c8d8ac8205687522dd4c3601edc7b7a927 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 30 Jun 2023 21:19:30 +0200 Subject: [PATCH 216/815] fix(build): allow `build` command to override plugin's build and option to disable warning --- README.md | 9 ++++++++- lua/lazy/core/config.lua | 6 ++++++ lua/lazy/manage/task/plugin.lua | 18 +++++++++++------- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 8610761..a30e651 100644 --- a/README.md +++ b/README.md @@ -306,7 +306,7 @@ return { -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - concurrency = nil, ---@type number limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.loop.available_parallelism() * 2) or nil, ---@type number limit the maximum amount of concurrent tasks git = { -- defaults for the `Lazy log` command -- log = { "-10" }, -- show the last 10 commits @@ -439,6 +439,12 @@ return { skip_if_doc_exists = true, }, state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + build = { + -- Plugins can provide a `build.lua` file that will be executed when the plugin is installed + -- or updated. When the plugin spec also has a `build` command, the plugin's `build.lua` not be + -- executed. In this case, a warning message will be shown. + warn_on_override = true, + }, } ``` @@ -500,6 +506,7 @@ Any operation can be started from the UI, with a sub command or an API function: | `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | | `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | | `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | +| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | | `:Lazy restore [plugins]` | `require("lazy").restore(opts?)` | Updates all plugins to the state in the lockfile. For a single plugin: restore it to the state in the lockfile or to a given commit under the cursor | | `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | | `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index b655b9b..9a25a7d 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -150,6 +150,12 @@ M.defaults = { skip_if_doc_exists = true, }, state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + build = { + -- Plugins can provide a `build.lua` file that will be executed when the plugin is installed + -- or updated. When the plugin spec also has a `build` command, the plugin's `build.lua` not be + -- executed. In this case, a warning message will be shown. + warn_on_override = true, + }, debug = false, } diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index 00dd262..fd6153b 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -1,5 +1,6 @@ local Util = require("lazy.util") local Loader = require("lazy.core.loader") +local Config = require("lazy.core.config") ---@type table local M = {} @@ -32,14 +33,17 @@ M.build = { local build_file = get_build_file(self.plugin) if build_file then if builders then - Util.warn( - ("Plugin **%s** provides its own build script.\nPlease remove the `build` option from the plugin's spec"):format( - self.plugin.name + if Config.options.build.warn_on_override then + Util.warn( + ("Plugin **%s** provides its own build script, but you also defined a `build` command.\nThe `build.lua` file will not be used"):format( + self.plugin.name + ) ) - ) - end - builders = function() - Loader.source(build_file) + end + else + builders = function() + Loader.source(build_file) + end end end if builders then From d65d5441d997c98be8c261ca8537694c5f4642be Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 30 Jun 2023 19:20:17 +0000 Subject: [PATCH 217/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 51c9d09..6fe0750 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -405,7 +405,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - concurrency = nil, ---@type number limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.loop.available_parallelism() 2) or nil, ---@type number limit the maximum amount of concurrent tasks git = { -- defaults for the `Lazy log` command -- log = { "-10" }, -- show the last 10 commits @@ -538,6 +538,12 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* skip_if_doc_exists = true, }, state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + build = { + -- Plugins can provide a `build.lua` file that will be executed when the plugin is installed + -- or updated. When the plugin spec also has a `build` command, the plugin's `build.lua` not be + -- executed. In this case, a warning message will be shown. + warn_on_override = true, + }, } < @@ -609,6 +615,8 @@ function: :Lazy profile require("lazy").profile() Show detailed profiling + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin (experimental!!) + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to the state in the lockfile. For a single plugin: restore it to the state in the lockfile or to a given commit under the cursor From 0d61488b89a570415177f75a36ef93616aac6c77 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 1 Jul 2023 08:51:17 +0200 Subject: [PATCH 218/815] chore(main): release 9.25.1 (#904) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6d9c91..26ec8d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [9.25.1](https://github.com/folke/lazy.nvim/compare/v9.25.0...v9.25.1) (2023-06-30) + + +### Bug Fixes + +* **build:** allow `build` command to override plugin's build and option to disable warning ([189371c](https://github.com/folke/lazy.nvim/commit/189371c8d8ac8205687522dd4c3601edc7b7a927)) + ## [9.25.0](https://github.com/folke/lazy.nvim/compare/v9.24.2...v9.25.0) (2023-06-30) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9a25a7d..4263bc1 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -159,7 +159,7 @@ M.defaults = { debug = false, } -M.version = "9.25.0" -- x-release-please-version +M.version = "9.25.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From f8611632d0f9c6818e8eb54f9bcd1dad122b5a7f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 1 Jul 2023 06:51:58 +0000 Subject: [PATCH 219/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 6fe0750..727445e 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 June 30 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 01 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From fbb0bea2db1963b4b83a3cb1f0c09d78a2ab286f Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 6 Jul 2023 15:30:01 +0200 Subject: [PATCH 220/815] feat(plugin)!: `cond` is now the same as `enabled`, but skips clean --- lua/lazy/core/loader.lua | 11 ++--------- lua/lazy/core/plugin.lua | 33 +++++++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 3065040..91a3f3a 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -297,15 +297,8 @@ function M._load(plugin, reason, opts) return Util.error("Plugin " .. plugin.name .. " is not installed") end - local cond = plugin.cond - if cond == nil then - cond = Config.options.defaults.cond - end - if cond ~= nil and not (opts and opts.force) then - if cond == false or (type(cond) == "function" and not cond(plugin)) then - plugin._.cond = false - return - end + if plugin._.cond == false and not (opts and opts.force) then + return end ---@diagnostic disable-next-line: assign-type-mismatch diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index c373f6d..3019d8a 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -146,13 +146,20 @@ function Spec:warn(msg) self:log(msg, vim.log.levels.WARN) end -function Spec:fix_disabled() +function Spec:fix_cond() for _, plugin in pairs(self.plugins) do - if not plugin.name or not plugin.dir then - self:error("Plugin spec for **" .. plugin.name .. "** not found.\n```lua\n" .. vim.inspect(plugin) .. "\n```") - self.plugins[plugin.name] = nil + local cond = plugin.cond + if cond == nil then + cond = Config.options.defaults.cond + end + if cond == false or (type(cond) == "function" and not cond(plugin)) then + plugin._.cond = false + plugin.enabled = false end end +end + +function Spec:fix_optional() if not self.optional then ---@param plugin LazyPlugin local function all_optional(plugin) @@ -166,6 +173,18 @@ function Spec:fix_disabled() end end end +end + +function Spec:fix_disabled() + for _, plugin in pairs(self.plugins) do + if not plugin.name or not plugin.dir then + self:error("Plugin spec for **" .. plugin.name .. "** not found.\n```lua\n" .. vim.inspect(plugin) .. "\n```") + self.plugins[plugin.name] = nil + end + end + + self:fix_optional() + self:fix_cond() ---@type table plugin to parent plugin local dep_of = {} @@ -384,6 +403,12 @@ function M.update_state() end end + for _, plugin in pairs(Config.spec.disabled) do + if plugin._.cond == false then + installed[plugin.name] = nil + end + end + Config.to_clean = {} for pack, dir_type in pairs(installed) do table.insert(Config.to_clean, { From 045f23eb35bab4f64fb37b55ac796ff858b2e207 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 6 Jul 2023 15:38:21 +0200 Subject: [PATCH 221/815] test: fixed tests --- tests/core/plugin_spec.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index 2eaf349..3c37e91 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -47,6 +47,7 @@ describe("plugin spec opt", function() local spec = Plugin.Spec.new(vim.deepcopy(test)) assert(#spec.notifs == 0) Config.plugins = spec.plugins + Config.spec = spec Plugin.update_state() assert(vim.tbl_count(spec.plugins) == 3) assert(#spec.plugins.bar.dependencies == 2) From c27cd36e6c97ee716fc04620ee7d99bb4d866e3e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 6 Jul 2023 13:39:12 +0000 Subject: [PATCH 222/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 727445e..f49b1ef 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 01 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 06 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 29f8e3ecb7b035bd97c16b9bd218004907827345 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Jul 2023 15:40:23 +0200 Subject: [PATCH 223/815] chore(main): release 10.0.0 (#918) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 11 +++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 26ec8d3..9af83a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [10.0.0](https://github.com/folke/lazy.nvim/compare/v9.25.1...v10.0.0) (2023-07-06) + + +### ⚠ BREAKING CHANGES + +* **plugin:** `cond` is now the same as `enabled`, but skips clean + +### Features + +* **plugin:** `cond` is now the same as `enabled`, but skips clean ([fbb0bea](https://github.com/folke/lazy.nvim/commit/fbb0bea2db1963b4b83a3cb1f0c09d78a2ab286f)) + ## [9.25.1](https://github.com/folke/lazy.nvim/compare/v9.25.0...v9.25.1) (2023-06-30) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4263bc1..862ff1b 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -159,7 +159,7 @@ M.defaults = { debug = false, } -M.version = "9.25.1" -- x-release-please-version +M.version = "10.0.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 5082cd56e49c737619c967e9c57309c2eeaad425 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Lacaze Date: Thu, 6 Jul 2023 16:19:08 +0200 Subject: [PATCH 224/815] fix(stats): corrected typo in cputime() for Linux (#916) --- lua/lazy/stats.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/stats.lua b/lua/lazy/stats.lua index a2ccdd8..a898ff7 100644 --- a/lua/lazy/stats.lua +++ b/lua/lazy/stats.lua @@ -50,7 +50,7 @@ function M.cputime() local pnano = assert(ffi.new("nanotime[?]", 1)) local CLOCK_PROCESS_CPUTIME_ID = jit.os == "OSX" and 12 or 2 ffi.C.clock_gettime(CLOCK_PROCESS_CPUTIME_ID, pnano) - return tonumber(pnano[0].tv_sec) / 1e6 + tonumber(pnano[0].tv_nsec) / 1e6 + return tonumber(pnano[0].tv_sec) * 1e3 + tonumber(pnano[0].tv_nsec) / 1e6 end local function fallback() From 867528c0fec1f2908edd9539618e4b033203c954 Mon Sep 17 00:00:00 2001 From: yangbinji <1139040653@qq.com> Date: Thu, 6 Jul 2023 22:30:54 +0800 Subject: [PATCH 225/815] style(cache): fix comment case typo (#915) --- lua/lazy/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index 2b41ffd..226069b 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -33,7 +33,7 @@ function M.setup(spec, opts) end local start = vim.loop.hrtime() - -- use the NEovim cache if available + -- use the Neovim cache if available if vim.loader and vim.fn.has("nvim-0.9.1") == 1 then package.loaded["lazy.core.cache"] = vim.loader end From 5af331ea65418dc9361769891921fdee4bcc837a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Jul 2023 20:44:00 +0200 Subject: [PATCH 226/815] chore(main): release 10.0.1 (#919) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9af83a6..8d52236 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.0.1](https://github.com/folke/lazy.nvim/compare/v10.0.0...v10.0.1) (2023-07-06) + + +### Bug Fixes + +* **stats:** corrected typo in cputime() for Linux ([#916](https://github.com/folke/lazy.nvim/issues/916)) ([5082cd5](https://github.com/folke/lazy.nvim/commit/5082cd56e49c737619c967e9c57309c2eeaad425)) + ## [10.0.0](https://github.com/folke/lazy.nvim/compare/v9.25.1...v10.0.0) (2023-07-06) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 862ff1b..dbb0027 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -159,7 +159,7 @@ M.defaults = { debug = false, } -M.version = "10.0.0" -- x-release-please-version +M.version = "10.0.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From fd94e69ceb15268496b85ee61fcd55a08539df1d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 9 Jul 2023 09:44:08 +0200 Subject: [PATCH 227/815] fix(event): pass data to event lazy loaders. Fixes #922 --- lua/lazy/core/handler/event.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 8c64231..0e26c68 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -23,7 +23,7 @@ function M:_add(value) group = self.group, once = true, pattern = pattern, - callback = function() + callback = function(ev) if not self.active[value] then return end @@ -32,7 +32,7 @@ function M:_add(value) -- load the plugins Loader.load(self.active[value], { [self.type] = value }) -- check if any plugin created an event handler for this event and fire the group - self:trigger(event, pattern, groups) + self:trigger(event, pattern, groups, ev.data) Util.track() end, }) @@ -61,7 +61,7 @@ end ---@param event string|string[] ---@param pattern? string ---@param groups table -function M:trigger(event, pattern, groups) +function M:trigger(event, pattern, groups, data) local events = M.trigger_events[event] or { event } ---@cast events string[] for _, e in ipairs(events) do @@ -77,7 +77,7 @@ function M:trigger(event, pattern, groups) end Util.track({ event = autocmd.group_name }) Util.try(function() - vim.api.nvim_exec_autocmds(autocmd.event, { group = autocmd.group, modeline = false }) + vim.api.nvim_exec_autocmds(autocmd.event, { group = autocmd.group, modeline = false, data = data }) Util.track() end) end From 8ae6cb4b44ff95e556fcdd0054837241893a947f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 9 Jul 2023 07:44:55 +0000 Subject: [PATCH 228/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index f49b1ef..c498a6c 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 06 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 09 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From da8b00581a52f5f87ad2aba9f52171fda7491f18 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 9 Jul 2023 09:46:59 +0200 Subject: [PATCH 229/815] chore(main): release 10.0.2 (#923) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d52236..e4a24bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.0.2](https://github.com/folke/lazy.nvim/compare/v10.0.1...v10.0.2) (2023-07-09) + + +### Bug Fixes + +* **event:** pass data to event lazy loaders. Fixes [#922](https://github.com/folke/lazy.nvim/issues/922) ([fd94e69](https://github.com/folke/lazy.nvim/commit/fd94e69ceb15268496b85ee61fcd55a08539df1d)) + ## [10.0.1](https://github.com/folke/lazy.nvim/compare/v10.0.0...v10.0.1) (2023-07-06) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index dbb0027..9ed0f2a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -159,7 +159,7 @@ M.defaults = { debug = false, } -M.version = "10.0.1" -- x-release-please-version +M.version = "10.0.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From ea5b2e00bf7aeaaf10a4e93763419e4af2796782 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 12 Jul 2023 17:21:32 +0200 Subject: [PATCH 230/815] feat(loader): `LazyLoad` event with plugin name as `data` field. Useful to do stuff when a plugin loads --- README.md | 1 + lua/lazy/core/loader.lua | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index a30e651..eb3faa1 100644 --- a/README.md +++ b/README.md @@ -582,6 +582,7 @@ The following user events will be triggered: - **LazyClean**: after a clean - **LazyCheck**: after checking for updates - **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. - **LazySyncPre**: before running sync - **LazyInstallPre**: before an install - **LazyUpdatePre**: before an update diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 91a3f3a..ea1d143 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -333,6 +333,7 @@ function M._load(plugin, reason, opts) plugin._.loaded.time = Util.track().time table.remove(M.loading) vim.schedule(function() + vim.api.nvim_exec_autocmds("User", { pattern = "LazyLoad", modeline = false, data = plugin.name }) vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) end) end From f6aedf1269ee5e7dee04fd94f893535ac9ddb434 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 12 Jul 2023 15:22:18 +0000 Subject: [PATCH 231/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c498a6c..9107ded 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 09 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 12 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -688,6 +688,7 @@ The following user events will be triggered: - **LazyClean**after a clean - **LazyCheck**after checking for updates - **LazyLog**after running log +- **LazyLoad**after loading a plugin. The `data` attribute will contain the plugin name. - **LazySyncPre**before running sync - **LazyInstallPre**before an install - **LazyUpdatePre**before an update From 14d76aac4bd3ff07c1fca074c210f28f766a931e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 17:24:07 +0200 Subject: [PATCH 232/815] chore(main): release 10.1.0 (#927) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4a24bd..9d06808 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.1.0](https://github.com/folke/lazy.nvim/compare/v10.0.2...v10.1.0) (2023-07-12) + + +### Features + +* **loader:** `LazyLoad` event with plugin name as `data` field. Useful to do stuff when a plugin loads ([ea5b2e0](https://github.com/folke/lazy.nvim/commit/ea5b2e00bf7aeaaf10a4e93763419e4af2796782)) + ## [10.0.2](https://github.com/folke/lazy.nvim/compare/v10.0.1...v10.0.2) (2023-07-09) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9ed0f2a..505db78 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -159,7 +159,7 @@ M.defaults = { debug = false, } -M.version = "10.0.2" -- x-release-please-version +M.version = "10.1.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 2b241f74edb3f0a9de73c23f7a5a35048789bb08 Mon Sep 17 00:00:00 2001 From: Kasshi K <46557690+chickbone@users.noreply.github.com> Date: Sun, 16 Jul 2023 15:50:53 +0900 Subject: [PATCH 233/815] fix typo in health.lua (#933) --- lua/lazy/health.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 8fc6e95..8757b77 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -14,7 +14,7 @@ function M.check() if vim.fn.executable("git") == 1 then ok("Git installed") else - error("Git not installd?") + error("Git not installed?") end local sites = vim.opt.packpath:get() From 25beed5e2e935ebc00d7e3eed1dc502df3c40e39 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 16 Jul 2023 06:51:36 +0000 Subject: [PATCH 234/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 9107ded..6b22250 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 12 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 16 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 84266b9f0ff314319e69adfeb1a86bd72d1aff91 Mon Sep 17 00:00:00 2001 From: 3719e04 <56977205+3719e04@users.noreply.github.com> Date: Thu, 20 Jul 2023 16:48:50 -0500 Subject: [PATCH 235/815] feat(view): add option `ui.pills`. Set to `false` to disable the top buttons in the lazy window (#938) * add option `ui.button` * add option `ui.button` * refactor: rename button to pills --------- Co-authored-by: Folke Lemaitre --- README.md | 2 ++ lua/lazy/core/config.lua | 2 ++ lua/lazy/view/render.lua | 47 +++++++++++++++++++++------------------- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index eb3faa1..31ddfb7 100644 --- a/README.md +++ b/README.md @@ -339,6 +339,8 @@ return { border = "none", title = nil, ---@type string only works when border is not "none" title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean icons = { cmd = " ", config = "", diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 505db78..9f51a78 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -50,6 +50,8 @@ M.defaults = { border = "none", title = nil, ---@type string only works when border is not "none" title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean icons = { cmd = " ", config = "", diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 19a6feb..fe9f87e 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -112,38 +112,41 @@ function M:get_plugin(row) end function M:title() - self:nl():nl() + self:nl() local modes = vim.tbl_filter(function(c) return c.button end, ViewConfig.get_commands()) - for c, mode in ipairs(modes) do - local title = " " .. mode.name:sub(1, 1):upper() .. mode.name:sub(2) .. " (" .. mode.key .. ") " - if mode.name == "home" then - if self.view.state.mode == "home" then - title = " lazy.nvim " .. Config.options.ui.icons.lazy - else - title = " lazy.nvim (H) " - end - end - - if self.view.state.mode == mode.name then + if Config.options.ui.pills then + self:nl() + for c, mode in ipairs(modes) do + local title = " " .. mode.name:sub(1, 1):upper() .. mode.name:sub(2) .. " (" .. mode.key .. ") " if mode.name == "home" then - self:append(title, "LazyH1", { wrap = true }) + if self.view.state.mode == "home" then + title = " lazy.nvim " .. Config.options.ui.icons.lazy + else + title = " lazy.nvim (H) " + end + end + + if self.view.state.mode == mode.name then + if mode.name == "home" then + self:append(title, "LazyH1", { wrap = true }) + else + self:append(title, "LazyButtonActive", { wrap = true }) + self:highlight({ ["%(.%)"] = "LazySpecial" }) + end else - self:append(title, "LazyButtonActive", { wrap = true }) + self:append(title, "LazyButton", { wrap = true }) self:highlight({ ["%(.%)"] = "LazySpecial" }) end - else - self:append(title, "LazyButton", { wrap = true }) - self:highlight({ ["%(.%)"] = "LazySpecial" }) + if c == #modes then + break + end + self:append(" ") end - if c == #modes then - break - end - self:append(" ") + self:nl() end - self:nl() if self.progress.done < self.progress.total then self:progressbar() end From 61c43455b0be8eb855d0871000aa4425341a239e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 20 Jul 2023 23:42:38 +0200 Subject: [PATCH 236/815] style: lua annotations --- lua/lazy/util.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index c5c64a1..dbe108b 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -6,6 +6,7 @@ function M.file_exists(file) end ---@param opts? LazyFloatOptions +---@return LazyFloat function M.float(opts) return require("lazy.view.float")(opts) end From 50c365bfe972daa9352a0e62bb78fc7254cffeac Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 20 Jul 2023 21:49:43 +0000 Subject: [PATCH 237/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 6b22250..2ea5ea3 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 16 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 20 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -438,6 +438,8 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* border = "none", title = nil, ---@type string only works when border is not "none" title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean icons = { cmd = " ", config = "", From b7303a68309296fb4809c51ce0bf66722e5dc4f7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Jul 2023 08:14:51 +0200 Subject: [PATCH 238/815] chore(main): release 10.2.0 (#939) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d06808..c6ce672 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.2.0](https://github.com/folke/lazy.nvim/compare/v10.1.0...v10.2.0) (2023-07-20) + + +### Features + +* **view:** add option `ui.pills`. Set to `false` to disable the top buttons in the lazy window ([#938](https://github.com/folke/lazy.nvim/issues/938)) ([84266b9](https://github.com/folke/lazy.nvim/commit/84266b9f0ff314319e69adfeb1a86bd72d1aff91)) + ## [10.1.0](https://github.com/folke/lazy.nvim/compare/v10.0.2...v10.1.0) (2023-07-12) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9f51a78..4133c3f 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.1.0" -- x-release-please-version +M.version = "10.2.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From ed15f6b39422f46412212005f6d12c6f353b0293 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 21 Jul 2023 06:15:36 +0000 Subject: [PATCH 239/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 2ea5ea3..c861379 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 20 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 21 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From e428c5ee4b02dfb39203ac8745a58c1226ceebae Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 22 Jul 2023 08:24:24 +0200 Subject: [PATCH 240/815] fix(loader): getscriptinfo compat with stable. Fixes #944 --- lua/lazy/core/loader.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index ea1d143..caf9087 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -266,7 +266,7 @@ function M.reload(plugin) end -- reload any vimscript files for this plugin - local scripts = vim.fn.getscriptinfo({ name = ".vim" }) + local scripts = vim.fn.getscriptinfo() local loaded_scripts = {} for _, s in ipairs(scripts) do ---@type string From 54a2aa4db43ab6fc2bdbfd10db2939bc35f26af9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 22 Jul 2023 06:25:12 +0000 Subject: [PATCH 241/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c861379..25a6b08 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 21 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 22 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From af4d24b8d03ba5851f1099b024a417b62d8b6d48 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jul 2023 09:09:46 +0200 Subject: [PATCH 242/815] chore(main): release 10.2.1 (#946) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6ce672..19dc75e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.2.1](https://github.com/folke/lazy.nvim/compare/v10.2.0...v10.2.1) (2023-07-22) + + +### Bug Fixes + +* **loader:** getscriptinfo compat with stable. Fixes [#944](https://github.com/folke/lazy.nvim/issues/944) ([e428c5e](https://github.com/folke/lazy.nvim/commit/e428c5ee4b02dfb39203ac8745a58c1226ceebae)) + ## [10.2.0](https://github.com/folke/lazy.nvim/compare/v10.1.0...v10.2.0) (2023-07-20) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4133c3f..2576887 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.2.0" -- x-release-please-version +M.version = "10.2.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From e7334d8db5bab48463f8ab3ea020bf2f76aaa7f9 Mon Sep 17 00:00:00 2001 From: abeldekat <58370433+abeldekat@users.noreply.github.com> Date: Sat, 22 Jul 2023 08:20:52 +0000 Subject: [PATCH 243/815] feat(plugins): Given an optional plugin, conditionally discard deps (#947) * deps_of_all_optional: First, refactor the code responsible for disabling unneeded deps to be more generic * deps_of_all_optional: Second, also disable unneeded deps from plugins marked as all optional * deps_of_all_optional: add tests proving unneeded optional deps are now also discarded * deps_of_all_optional: forgot return type --------- Co-authored-by: abeldekat --- lua/lazy/core/plugin.lua | 70 +++++++++++++++++++++++++------------- tests/core/plugin_spec.lua | 19 +++++++++++ 2 files changed, 65 insertions(+), 24 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 3019d8a..f141d27 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -146,6 +146,31 @@ function Spec:warn(msg) self:log(msg, vim.log.levels.WARN) end +---@param gathered_deps string[] +---@param dep_of table +---@param on_disable fun(string):nil +function Spec:fix_dependencies(gathered_deps, dep_of, on_disable) + local function should_disable(dep_name) + for _, parent in ipairs(dep_of[dep_name] or {}) do + if self.plugins[parent] then + return false + end + end + return true + end + + for _, dep_name in ipairs(gathered_deps) do + -- only check if the plugin is still enabled and it is a dep + if self.plugins[dep_name] and self.plugins[dep_name]._.dep then + -- check if the dep is still used by another plugin + if should_disable(dep_name) then + -- disable the dep when no longer needed + on_disable(dep_name) + end + end + end +end + function Spec:fix_cond() for _, plugin in pairs(self.plugins) do local cond = plugin.cond @@ -159,7 +184,9 @@ function Spec:fix_cond() end end +---@return string[] function Spec:fix_optional() + local all_optional_deps = {} if not self.optional then ---@param plugin LazyPlugin local function all_optional(plugin) @@ -170,9 +197,13 @@ function Spec:fix_optional() for _, plugin in pairs(self.plugins) do if plugin.optional and all_optional(plugin) then self.plugins[plugin.name] = nil + if plugin.dependencies then + vim.list_extend(all_optional_deps, plugin.dependencies) + end end end end + return all_optional_deps end function Spec:fix_disabled() @@ -183,15 +214,16 @@ function Spec:fix_disabled() end end - self:fix_optional() - self:fix_cond() - ---@type table plugin to parent plugin local dep_of = {} ---@type string[] dependencies of disabled plugins local disabled_deps = {} + ---@type string[] dependencies of plugins that are completely optional + local all_optional_deps = self:fix_optional() + self:fix_cond() + for _, plugin in pairs(self.plugins) do local enabled = not (plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled())) if enabled then @@ -209,27 +241,17 @@ function Spec:fix_disabled() end end - -- check deps of disabled plugins - for _, dep in ipairs(disabled_deps) do - -- only check if the plugin is still enabled and it is a dep - if self.plugins[dep] and self.plugins[dep]._.dep then - -- check if the dep is still used by another plugin - local keep = false - for _, parent in ipairs(dep_of[dep] or {}) do - if self.plugins[parent] then - keep = true - break - end - end - -- disable the dep when no longer needed - if not keep then - local plugin = self.plugins[dep] - plugin._.kind = "disabled" - self.plugins[plugin.name] = nil - self.disabled[plugin.name] = plugin - end - end - end + -- fix deps of plugins that are completely optional + self:fix_dependencies(all_optional_deps, dep_of, function(dep_name) + self.plugins[dep_name] = nil + end) + -- fix deps of disabled plugins + self:fix_dependencies(disabled_deps, dep_of, function(dep_name) + local plugin = self.plugins[dep_name] + plugin._.kind = "disabled" + self.plugins[plugin.name] = nil + self.disabled[plugin.name] = plugin + end) end ---@param msg string diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index 3c37e91..f64cb4c 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -273,6 +273,25 @@ describe("plugin spec opt", function() end end end) + + it("handles the optional keyword", function() + local tests = { + [{ { "foo/bax" }, { "foo/bar", optional = true, dependencies = "foo/dep1" } }] = false, + [{ { "foo/bax", dependencies = "foo/dep1" }, { "foo/bar", optional = true, dependencies = "foo/dep1" } }] = true, + } + for test, ret in pairs(tests) do + local spec = Plugin.Spec.new(test) + assert(#spec.notifs == 0) + assert(spec.plugins.bax) + assert(not spec.plugins.bar) + assert(#spec.disabled == 0) + if ret then + assert(spec.plugins.dep1) + else + assert(not spec.plugins.opt1) + end + end + end) end) describe("plugin opts", function() From 3ad55ae678876516156cca2f361c51f7952a924b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 22 Jul 2023 10:23:12 +0200 Subject: [PATCH 244/815] chore(main): release 10.3.0 (#948) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19dc75e..cd65ac6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.3.0](https://github.com/folke/lazy.nvim/compare/v10.2.1...v10.3.0) (2023-07-22) + + +### Features + +* **plugins:** Given an optional plugin, conditionally discard deps ([#947](https://github.com/folke/lazy.nvim/issues/947)) ([e7334d8](https://github.com/folke/lazy.nvim/commit/e7334d8db5bab48463f8ab3ea020bf2f76aaa7f9)) + ## [10.2.1](https://github.com/folke/lazy.nvim/compare/v10.2.0...v10.2.1) (2023-07-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 2576887..51b8c3b 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.2.1" -- x-release-please-version +M.version = "10.3.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From a977a7ab21f570a28d592e4d57af4b1df286c399 Mon Sep 17 00:00:00 2001 From: Distinct Wind Date: Sun, 30 Jul 2023 17:08:52 +0800 Subject: [PATCH 245/815] docs: Fix doc missing bracket (#962) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31ddfb7..fb2371f 100644 --- a/README.md +++ b/README.md @@ -699,7 +699,7 @@ require("lazy").setup({ { "LazyVim/LazyVim", import = "lazyvim.plugins" }, { import = "lazyvim.plugins.extras.coding.copilot" }, } -) +}) ``` When you import specs, you can override them by simply adding a spec for the same plugin to your local From dac844ed617dda4f9ec85eb88e9629ad2add5e05 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 30 Jul 2023 09:09:38 +0000 Subject: [PATCH 246/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 25a6b08..5a22178 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 22 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 30 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -813,7 +813,7 @@ For example, to import LazyVim core plugins and an optional plugin: { "LazyVim/LazyVim", import = "lazyvim.plugins" }, { import = "lazyvim.plugins.extras.coding.copilot" }, } - ) + }) < When you import specs, you can override them by simply adding a spec for the From 4eb3e932e5006c925069c2386c0c6da6bb5baccb Mon Sep 17 00:00:00 2001 From: Darkhan Date: Sat, 26 Aug 2023 15:47:18 +0100 Subject: [PATCH 247/815] Make commit pattern more accurate (#973) Sometimes when hovering over updated plugins and triggering `diff` with `d` key, I get an empty `diff` view. I traced the problem to a very generic `commit_pattern` which currently matches any alphanumeric sequence of 7 characters surrounded by "word boundary" / frontier patterns. I adjusted the regex to match only `[a-z0-9] * 7` which should make this issue appear less. I am keeping the older frontier sets `%f[%w]` and `%f[%W]` because if I switch to `%f[a-f0-9]` and `%f[^0-9a-f]` I will be matching strings like `zzz1234567xxx`. --- lua/lazy/view/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 93611e2..d179f11 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -159,7 +159,7 @@ function M:open_url(path) end function M:setup_patterns() - local commit_pattern = "%f[%w](" .. string.rep("%w", 7) .. ")%f[%W]" + local commit_pattern = "%f[%w](" .. string.rep("[a-f0-9]", 7) .. ")%f[%W]" self:on_pattern(ViewConfig.keys.hover, { [commit_pattern] = function(hash) self:diff({ commit = hash, browser = true }) From 0e9c3934ab5db59156997f78a5186ed20e7568cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 26 Aug 2023 14:47:56 +0000 Subject: [PATCH 248/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 5a22178..aa730bb 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 July 30 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 August 26 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From d179a17fa1552de9d494b72243497dc86f3325f9 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 26 Aug 2023 17:21:48 +0200 Subject: [PATCH 249/815] docs: added link to pckr.nvim --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fb2371f..62de315 100644 --- a/README.md +++ b/README.md @@ -809,6 +809,7 @@ This makes it easier for users, so they no longer need to specify a `build` comm ## 📦 Other Neovim Plugin Managers in Lua +- [pckr.nvim](https://github.com/lewis6991/pckr.nvim) - [packer.nvim](https://github.com/wbthomason/packer.nvim) - [paq-nvim](https://github.com/savq/paq-nvim) - [neopm](https://github.com/ii14/neopm) From 2a9354c7d2368d78cbd5575a51a2af5bd8a6ad01 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 26 Aug 2023 15:22:34 +0000 Subject: [PATCH 250/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index aa730bb..a045ce6 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -961,6 +961,7 @@ command. OTHER NEOVIM PLUGIN MANAGERS IN LUA*lazy.nvim-lazy.nvim-other-neovim-plugin-managers-in-lua* +- pckr.nvim - packer.nvim - paq-nvim - neopm From 24f6b6f1c7fb68f02335dd9579faee8b243e6a54 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 27 Sep 2023 12:39:39 +0200 Subject: [PATCH 251/815] fix: properly setup handlers when loading a plugin before startup (build) etc --- lua/lazy/core/handler/init.lua | 15 ++++++++++----- lua/lazy/core/loader.lua | 7 +++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lua/lazy/core/handler/init.lua b/lua/lazy/core/handler/init.lua index af85820..9c6b92d 100644 --- a/lua/lazy/core/handler/init.lua +++ b/lua/lazy/core/handler/init.lua @@ -19,13 +19,19 @@ M.types = { ---@type table M.handlers = {} -function M.setup() +M.did_setup = false + +function M.init() for _, type in pairs(M.types) do M.handlers[type] = M.new(type) end +end + +function M.setup() + M.did_setup = true for _, plugin in pairs(Config.plugins) do Util.try(function() - M.enable(plugin, true) + M.enable(plugin) end, "Failed to setup handlers for " .. plugin.name) end end @@ -40,9 +46,8 @@ function M.disable(plugin) end ---@param plugin LazyPlugin ----@param force? boolean -function M.enable(plugin, force) - if force or not plugin._.loaded then +function M.enable(plugin) + if not plugin._.loaded then for type, handler in pairs(M.handlers) do if plugin[type] then handler:add(plugin) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index caf9087..1912338 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -34,6 +34,7 @@ function M.setup() -- load the plugins Plugin.load() + Handler.init() -- install missing plugins if Config.options.install.missing then @@ -301,6 +302,12 @@ function M._load(plugin, reason, opts) return end + if not Handler.did_setup then + Util.try(function() + Handler.enable(plugin) + end, "Failed to setup handlers for " .. plugin.name) + end + ---@diagnostic disable-next-line: assign-type-mismatch plugin._.loaded = {} for k, v in pairs(reason) do From fe9f93692ea92a5091bc3abc2a8881552f6aeb55 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Sep 2023 10:40:28 +0000 Subject: [PATCH 252/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 88 +++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index a045ce6..a691894 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 August 26 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 September 27 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -160,7 +160,7 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* build fun(LazyPlugin) or string or a list of build commands build is executed when a plugin is installed or updated. Before running build, a plugin is first loaded. If it’s a string it will be ran as a shell - command. When prefixed with it is a Neovim command. + command. When prefixed with : it is a Neovim command. You can also specify a list to executed multiple build commands. Some plugins provide their own build.lua which is automatically used by lazy. So no need to @@ -181,7 +181,7 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* Defaults to true event string? or string[] or Lazy-load on event. Events can be specified as - fun(self:LazyPlugin, event:string[]):string[] BufEnter or with a pattern like BufEnter .lua + fun(self:LazyPlugin, event:string[]):string[] BufEnter or with a pattern like BufEnter *.lua cmd string? or string[] or Lazy-load on command fun(self:LazyPlugin, cmd:string[]):string[] @@ -281,7 +281,7 @@ The `version` property supports Semver ranges. Click to see some examples ~ -- latest stable version (this excludes pre-release versions) +- `*`latest stable version (this excludes pre-release versions) - `1.2.x`any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. - `^1.2.3`any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. - `~1.2.3`any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. @@ -290,8 +290,8 @@ Click to see some examples ~ - `<1.2.3`any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. - `<=1.2.3`any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc -You can set `config.defaults.version = ""` to install the latest stable version -of plugins that support Semver. +You can set `config.defaults.version = "*"` to install the latest stable +version of plugins that support Semver. EXAMPLES ~ @@ -400,12 +400,12 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* -- default `cond` you can use to globally disable a lot of plugins -- when running inside vscode for example cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - -- version = "", -- enable this to try installing the latest stable versions of plugins + -- version = "*", -- enable this to try installing the latest stable versions of plugins }, -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - concurrency = jit.os:find("Windows") and (vim.loop.available_parallelism() 2) or nil, ---@type number limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.loop.available_parallelism() * 2) or nil, ---@type number limit the maximum amount of concurrent tasks git = { -- defaults for the `Lazy log` command -- log = { "-10" }, -- show the last 10 commits @@ -441,25 +441,25 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* -- Show pills on top of the Lazy window pills = true, ---@type boolean icons = { - cmd = " ", - config = "", - event = "", - ft = " ", - init = " ", - import = " ", - keys = " ", + cmd = " ", + config = "", + event = "", + ft = " ", + init = " ", + import = " ", + keys = " ", lazy = "󰒲 ", - loaded = "", - not_loaded = "", - plugin = " ", - runtime = " ", - source = " ", - start = "", - task = " ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + source = " ", + start = "", + task = "✔ ", list = { - "", - "", - "", + "●", + "➜", + "★", "‒", }, }, @@ -488,11 +488,11 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* }, diff = { -- diff command can be one of: - -- browser: opens the github compare view. Note that this is always mapped to as well, + -- * browser: opens the github compare view. Note that this is always mapped to as well, -- so you can have a different command for diff - -- git: will run git diff and open a buffer with filetype git - -- terminal_git: will open a pseudo terminal with git diff - -- diffview.nvim: will open Diffview to show the diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff cmd = "git", }, checker = { @@ -535,7 +535,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* readme = { enabled = true, root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua//README.md" }, + files = { "README.md", "lua/**/README.md" }, -- only generate markdown helptags for plugins that dont have docs skip_if_doc_exists = true, }, @@ -556,17 +556,17 @@ If you don’t want to use a Nerd Font, you can replace the icons with Unicode s ui = { icons = { cmd = "⌘", - config = "", - event = "", - ft = "", - init = "", - keys = "", - plugin = "", - runtime = "", - source = "", - start = "", - task = "", - lazy = " ", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", }, }, } @@ -671,7 +671,7 @@ Example of configuring lualine.nvim ~ { require("lazy.status").updates, cond = require("lazy.status").has_updates, - color = { fg = "ff9e64" }, + color = { fg = "#ff9e64" }, }, }, }, @@ -784,7 +784,7 @@ Example: } < -- Any lua file in `~/.config/nvim/lua/plugins/.lua` will be automatically merged in the main plugin spec +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec For a real-life example, you can check LazyVim and more specifically: @@ -836,7 +836,7 @@ PACKER.NVIM ~ - `run` `build` - `lock` `pin` - `disable=true` `enabled = false` -- `tag=''` `version=""` +- `tag='*'` `version="*"` - `after` **not needed** for most use-cases. Use `dependencies` otherwise. - `wants` **not needed** for most use-cases. Use `dependencies` otherwise. - `config` don’t support string type, use `fun(LazyPlugin)` instead. From cc24fc0e858c080eb8a7462697c48c6046849359 Mon Sep 17 00:00:00 2001 From: Mike <10135646+mikesmithgh@users.noreply.github.com> Date: Wed, 27 Sep 2023 06:49:20 -0400 Subject: [PATCH 253/815] docs: fix spec opts in README (#1030) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 62de315..0f25814 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ require("lazy").setup({ | 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 | | **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 | @@ -100,7 +100,7 @@ require("lazy").setup({ | **commit** | `string?` | Commit of the repository | | **version** | `string?` or `false` to override the default | 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 | -| `submodules` | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | +| **submodules** | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | | **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | | **cmd** | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]` | Lazy-load on command | | **ft** | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]` | Lazy-load on filetype | From 0e1d264ab6567725b6c30ffd1ad120b16884ff45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maria=20Jos=C3=A9=20Solano?= Date: Wed, 27 Sep 2023 03:51:11 -0700 Subject: [PATCH 254/815] fix: return true when opening diff (#970) --- lua/lazy/view/init.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index d179f11..869fac7 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -243,6 +243,8 @@ function M:diff(opts) else Diff.handlers[Config.options.diff.cmd](plugin, diff) end + + return true end end From 7ca3bdb566c3ba4492f2d22b37c2c9e26f09470f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 27 Sep 2023 14:48:20 +0200 Subject: [PATCH 255/815] chore(main): release 10.3.1 (#1051) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd65ac6..b0cefce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [10.3.1](https://github.com/folke/lazy.nvim/compare/v10.3.0...v10.3.1) (2023-09-27) + + +### Bug Fixes + +* properly setup handlers when loading a plugin before startup (build) etc ([24f6b6f](https://github.com/folke/lazy.nvim/commit/24f6b6f1c7fb68f02335dd9579faee8b243e6a54)) +* return true when opening diff ([#970](https://github.com/folke/lazy.nvim/issues/970)) ([0e1d264](https://github.com/folke/lazy.nvim/commit/0e1d264ab6567725b6c30ffd1ad120b16884ff45)) + ## [10.3.0](https://github.com/folke/lazy.nvim/compare/v10.2.1...v10.3.0) (2023-07-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 51b8c3b..d0499fb 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.3.0" -- x-release-please-version +M.version = "10.3.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 4f27fc33c4e0e81802f4afadbe350de93447ac1e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 28 Sep 2023 12:26:21 +0200 Subject: [PATCH 256/815] fix(ui): sort plugins case insensitive --- lua/lazy/view/render.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index fe9f87e..442e769 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -241,6 +241,9 @@ function M:section(section) end, self.plugins) local count = #section_plugins + table.sort(section_plugins, function(a, b) + return a.name:lower() < b.name:lower() + end) if count > 0 then self:append(section.title, "LazyH2"):append(" (" .. count .. ")", "LazyComment"):nl() for _, plugin in ipairs(section_plugins) do From 54ecfc7c245e5e3fbbc749658ad171335418d48c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 28 Sep 2023 12:28:05 +0200 Subject: [PATCH 257/815] fix(help): sort readme tags case sensitive. Fixes #67 --- lua/lazy/help.lua | 2 +- lua/lazy/util.lua | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lua/lazy/help.lua b/lua/lazy/help.lua index 4a289eb..a33e808 100644 --- a/lua/lazy/help.lua +++ b/lua/lazy/help.lua @@ -63,7 +63,7 @@ function M.update() local lines = { [[!_TAG_FILE_ENCODING utf-8 //]] } Util.foreach(tags, function(_, tag) table.insert(lines, ("%s\t%s\t/%s"):format(tag.tag, tag.file, tag.line)) - end) + end, { case_sensitive = true }) Util.write_file(docs .. "/tags", table.concat(lines, "\n")) end diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index dbe108b..d841255 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -235,10 +235,14 @@ end ---@generic V ---@param t table ---@param fn fun(key:string, value:V) -function M.foreach(t, fn) +---@param opts? {case_sensitive?:boolean} +function M.foreach(t, fn, opts) ---@type string[] local keys = vim.tbl_keys(t) pcall(table.sort, keys, function(a, b) + if opts and opts.case_sensitive then + return a < b + end return a:lower() < b:lower() end) for _, key in ipairs(keys) do From 6b55e4695a5e85d862e517bf860bd913a4a45d86 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 28 Sep 2023 10:28:53 +0000 Subject: [PATCH 258/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index a691894..b406615 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 September 27 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 September 28 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From f3c7169dd65f5ae528b6c930492359971014290b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 29 Sep 2023 16:11:56 +0200 Subject: [PATCH 259/815] feat(plugin): dont include plugin spec fragments for disabled or optional plugins (#1058) * feat(plugin): dont include plugin spec fragments for disabled or optional plugins * test: fixed tests * fix(plugin): calculate handlers after disabling plugins * fix(plugin): clear Plugin._.super when rebuilding * fix(ui): dont process handlers for disabled plugins * test: added tests for disabling fragments * fix(plugin): ignore any installed deps of a disabled conditional plugin. Fixes #1053 --- lua/lazy/core/plugin.lua | 190 +++++++++++++++++++++++-------------- lua/lazy/types.lua | 7 +- lua/lazy/view/render.lua | 14 +-- tests/core/plugin_spec.lua | 50 +++++++++- 4 files changed, 181 insertions(+), 80 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index f141d27..00039ef 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -8,22 +8,30 @@ M.loading = false ---@class LazySpecLoader ---@field plugins table +---@field fragments table ---@field disabled table +---@field dirty table +---@field ignore_installed table ---@field modules string[] ---@field notifs {msg:string, level:number, file?:string}[] ---@field importing? string ---@field optional? boolean local Spec = {} M.Spec = Spec +M.last_fid = 0 +M.fid_stack = {} ---@type number[] ---@param spec? LazySpec ---@param opts? {optional?:boolean} function Spec.new(spec, opts) local self = setmetatable({}, { __index = Spec }) self.plugins = {} + self.fragments = {} self.disabled = {} self.modules = {} + self.dirty = {} self.notifs = {} + self.ignore_installed = {} self.optional = opts and opts.optional if spec then self:parse(spec) @@ -33,6 +41,7 @@ end function Spec:parse(spec) self:normalize(spec) + self:fix_disabled() -- calculate handlers for _, plugin in pairs(self.plugins) do @@ -42,8 +51,6 @@ function Spec:parse(spec) end end end - - self:fix_disabled() end -- PERF: optimized code to get package name without using lua patterns @@ -56,8 +63,7 @@ end ---@param plugin LazyPlugin ---@param results? string[] ----@param is_dep? boolean -function Spec:add(plugin, results, is_dep) +function Spec:add(plugin, results) -- check if we already processed this spec. Can happen when a user uses the same instance of a spec in multiple specs -- see https://github.com/folke/lazy.nvim/issues/45 if rawget(plugin, "_") then @@ -124,10 +130,28 @@ function Spec:add(plugin, results, is_dep) plugin.config = nil end - plugin._ = {} - plugin._.dep = is_dep + local fpid = M.fid_stack[#M.fid_stack] + + M.last_fid = M.last_fid + 1 + plugin._ = { + fid = M.last_fid, + fpid = fpid, + dep = fpid ~= nil, + } + self.fragments[plugin._.fid] = plugin + + if fpid then + local parent = self.fragments[fpid] + parent._.fdeps = parent._.fdeps or {} + table.insert(parent._.fdeps, plugin._.fid) + end + + if plugin.dependencies then + table.insert(M.fid_stack, plugin._.fid) + plugin.dependencies = self:normalize(plugin.dependencies, {}) + table.remove(M.fid_stack) + end - plugin.dependencies = plugin.dependencies and self:normalize(plugin.dependencies, {}, true) or nil if self.plugins[plugin.name] then plugin = self:merge(self.plugins[plugin.name], plugin) end @@ -146,27 +170,73 @@ function Spec:warn(msg) self:log(msg, vim.log.levels.WARN) end ----@param gathered_deps string[] ----@param dep_of table ----@param on_disable fun(string):nil -function Spec:fix_dependencies(gathered_deps, dep_of, on_disable) - local function should_disable(dep_name) - for _, parent in ipairs(dep_of[dep_name] or {}) do - if self.plugins[parent] then - return false - end - end - return true +--- Rebuilds a plugin spec excluding any removed fragments +---@param name string +function Spec:rebuild(name) + local plugin = self.plugins[name] + if not plugin then + return end - for _, dep_name in ipairs(gathered_deps) do - -- only check if the plugin is still enabled and it is a dep - if self.plugins[dep_name] and self.plugins[dep_name]._.dep then - -- check if the dep is still used by another plugin - if should_disable(dep_name) then - -- disable the dep when no longer needed - on_disable(dep_name) + local fragments = {} ---@type LazyPlugin[] + + repeat + local super = plugin._.super + if self.fragments[plugin._.fid] then + plugin._.dep = plugin._.fpid ~= nil + plugin._.super = nil + if plugin._.fdeps then + plugin.dependencies = {} + for _, cid in ipairs(plugin._.fdeps) do + if self.fragments[cid] then + table.insert(plugin.dependencies, self.fragments[cid].name) + end + end end + setmetatable(plugin, nil) + table.insert(fragments, 1, plugin) + end + plugin = super + until not plugin + + if #fragments == 0 then + self.plugins[name] = nil + return + end + + plugin = fragments[1] + for i = 2, #fragments do + plugin = self:merge(plugin, fragments[i]) + end + self.plugins[name] = plugin +end + +--- Recursively removes all fragments from a plugin spec or a given fragment +---@param id string|number Plugin name or fragment id +---@param opts {self: boolean} +function Spec:remove_fragments(id, opts) + local fids = {} ---@type number[] + + if type(id) == "number" then + fids[1] = id + else + local plugin = self.plugins[id] + repeat + fids[#fids + 1] = plugin._.fid + plugin = plugin._.super + until not plugin + end + + for _, fid in ipairs(fids) do + local fragment = self.fragments[fid] + if fragment then + for _, cid in ipairs(fragment._.fdeps or {}) do + self:remove_fragments(cid, { self = true }) + end + if opts.self then + self.fragments[fid] = nil + end + self.dirty[fragment.name] = true end end end @@ -179,14 +249,20 @@ function Spec:fix_cond() end if cond == false or (type(cond) == "function" and not cond(plugin)) then plugin._.cond = false + local stack = { plugin } + while #stack > 0 do + local p = table.remove(stack) + for _, dep in ipairs(p.dependencies or {}) do + table.insert(stack, self.plugins[dep]) + end + self.ignore_installed[p.name] = true + end plugin.enabled = false end end end ----@return string[] function Spec:fix_optional() - local all_optional_deps = {} if not self.optional then ---@param plugin LazyPlugin local function all_optional(plugin) @@ -196,14 +272,12 @@ function Spec:fix_optional() -- handle optional plugins for _, plugin in pairs(self.plugins) do if plugin.optional and all_optional(plugin) then + -- remove all optional fragments + self:remove_fragments(plugin.name, { self = true }) self.plugins[plugin.name] = nil - if plugin.dependencies then - vim.list_extend(all_optional_deps, plugin.dependencies) - end end end end - return all_optional_deps end function Spec:fix_disabled() @@ -214,44 +288,24 @@ function Spec:fix_disabled() end end - ---@type table plugin to parent plugin - local dep_of = {} - - ---@type string[] dependencies of disabled plugins - local disabled_deps = {} - - ---@type string[] dependencies of plugins that are completely optional - local all_optional_deps = self:fix_optional() + self:fix_optional() self:fix_cond() for _, plugin in pairs(self.plugins) do - local enabled = not (plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled())) - if enabled then - for _, dep in ipairs(plugin.dependencies or {}) do - dep_of[dep] = dep_of[dep] or {} - table.insert(dep_of[dep], plugin.name) - end - else + local disabled = plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled()) + if disabled then plugin._.kind = "disabled" + -- remove all child fragments + self:remove_fragments(plugin.name, { self = false }) self.plugins[plugin.name] = nil self.disabled[plugin.name] = plugin - if plugin.dependencies then - vim.list_extend(disabled_deps, plugin.dependencies) - end end end - -- fix deps of plugins that are completely optional - self:fix_dependencies(all_optional_deps, dep_of, function(dep_name) - self.plugins[dep_name] = nil - end) - -- fix deps of disabled plugins - self:fix_dependencies(disabled_deps, dep_of, function(dep_name) - local plugin = self.plugins[dep_name] - plugin._.kind = "disabled" - self.plugins[plugin.name] = nil - self.disabled[plugin.name] = plugin - end) + -- rebuild any plugin specs that were modified + for name, _ in pairs(self.dirty) do + self:rebuild(name) + end end ---@param msg string @@ -272,24 +326,24 @@ end ---@param spec LazySpec|LazySpecImport ---@param results? string[] ---@param is_dep? boolean -function Spec:normalize(spec, results, is_dep) +function Spec:normalize(spec, results) if type(spec) == "string" then - if is_dep and not spec:find("/", 1, true) then + if not spec:find("/", 1, true) then -- spec is a plugin name if results then table.insert(results, spec) end else - self:add({ spec }, results, is_dep) + self:add({ spec }, results) end elseif #spec > 1 or Util.is_list(spec) then ---@cast spec LazySpec[] for _, s in ipairs(spec) do - self:normalize(s, results, is_dep) + self:normalize(s, results) end elseif spec[1] or spec.dir or spec.url then ---@cast spec LazyPlugin - local plugin = self:add(spec, results, is_dep) + local plugin = self:add(spec, results) ---@diagnostic disable-next-line: cast-type-mismatch ---@cast plugin LazySpecImport if plugin and plugin.import then @@ -425,10 +479,8 @@ function M.update_state() end end - for _, plugin in pairs(Config.spec.disabled) do - if plugin._.cond == false then - installed[plugin.name] = nil - end + for name in pairs(Config.spec.ignore_installed) do + installed[name] = nil end Config.to_clean = {} diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index df8c19d..0fa9202 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -2,12 +2,15 @@ ---@alias LazyPluginKind "normal"|"clean"|"disabled" ---@class LazyPluginState +---@field fid number id of the plugin spec fragment +---@field fpid? number parent id of the plugin spec fragment +---@field fdeps? number[] children ids of the fragment ---@field loaded? {[string]:string}|{time:number} ----@field installed boolean +---@field installed? boolean ---@field tasks? LazyTask[] ---@field dirty? boolean ---@field updated? {from:string, to:string} ----@field is_local boolean +---@field is_local? boolean ---@field updates? {from:GitInfo, to:GitInfo} ---@field cloned? boolean ---@field kind? LazyPluginKind diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 442e769..5b1f9af 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -411,13 +411,15 @@ function M:plugin(plugin) else self:append(" ") local reason = {} - for handler in pairs(Handler.types) do - if plugin[handler] then - local trigger = {} - for _, value in ipairs(plugin[handler]) do - table.insert(trigger, type(value) == "table" and value[1] or value) + if plugin._.kind ~= "disabled" then + for handler in pairs(Handler.types) do + if plugin[handler] then + local trigger = {} + for _, value in ipairs(plugin[handler]) do + table.insert(trigger, type(value) == "table" and value[1] or value) + end + reason[handler] = table.concat(trigger, " ") end - reason[handler] = table.concat(trigger, " ") end end for _, other in pairs(Config.plugins) do diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index f64cb4c..15eb060 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -1,11 +1,25 @@ local Config = require("lazy.core.config") local Plugin = require("lazy.core.plugin") -local Loader = require("lazy.core.loader") local assert = require("luassert") Config.setup() +---@param plugins LazyPlugin[]|LazyPlugin +local function clean(plugins) + local p = plugins + plugins = type(plugins) == "table" and plugins or { plugins } + for _, plugin in pairs(plugins) do + plugin._.fid = nil + plugin._.fpid = nil + plugin._.fdeps = nil + if plugin._.dep == false then + plugin._.dep = nil + end + end + return p +end + describe("plugin spec url/name", function() local tests = { { { dir = "~/foo" }, { name = "foo", dir = vim.fn.fnamemodify("~/foo", ":p") } }, @@ -28,6 +42,7 @@ describe("plugin spec url/name", function() end local spec = Plugin.Spec.new(test[1]) local plugins = vim.tbl_values(spec.plugins) + plugins[1]._ = {} assert(#spec.notifs == 0) assert.equal(1, #plugins) assert.same(test[2], plugins[1]) @@ -61,7 +76,7 @@ describe("plugin spec opt", function() for _, plugin in pairs(spec.plugins) do plugin.dir = nil end - assert.same(spec.plugins, { + assert.same(clean(spec.plugins), { bar = { "foo/bar", _ = {}, @@ -105,7 +120,7 @@ describe("plugin spec opt", function() for _, plugin in pairs(spec.plugins) do plugin.dir = nil end - assert.same(spec.plugins, { + assert.same(clean(spec.plugins), { bar = { "foo/bar", _ = {}, @@ -335,3 +350,32 @@ describe("plugin opts", function() end end) end) + +describe("plugin spec", function() + it("only includes fragments from enabled plugins", function() + local tests = { + { + spec = { + { "foo/disabled", enabled = false, dependencies = { "foo/bar", opts = { key_disabled = true } } }, + { "foo/disabled", dependencies = { "foo/bar", opts = { key_disabled_two = true } } }, + { "foo/conditional", cond = false, dependencies = { "foo/bar", opts = { key_cond = true } } }, + { "foo/optional", optional = true, dependencies = { "foo/bar", opts = { key_optional = true } } }, + { "foo/active", dependencies = { "foo/bar", opts = { key_active = true } } }, + { + "foo/bar", + opts = { key = true }, + }, + }, + expected_opts = { key = true, key_active = true }, + }, -- for now, one test... + } + for _, test in ipairs(tests) do + local spec = Plugin.Spec.new(test.spec) + assert(#spec.notifs == 0) + assert(vim.tbl_count(spec.plugins) == 2) + assert(spec.plugins.active) + assert(spec.plugins.bar) + assert.same(test.expected_opts, Plugin.values(spec.plugins.bar, "opts")) + end + end) +end) From 7bf6a274582b01150c71453a9c007be22e315e62 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 29 Sep 2023 14:12:39 +0000 Subject: [PATCH 260/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b406615..2f1cb7f 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 September 28 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 September 29 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 753c391b44daadafb0e821d4a4dfd72c4fac6f43 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 16:14:01 +0200 Subject: [PATCH 261/815] chore(main): release 10.4.0 (#1054) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0cefce..045befb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [10.4.0](https://github.com/folke/lazy.nvim/compare/v10.3.1...v10.4.0) (2023-09-29) + + +### Features + +* **plugin:** dont include plugin spec fragments for disabled or optional plugins ([#1058](https://github.com/folke/lazy.nvim/issues/1058)) ([f3c7169](https://github.com/folke/lazy.nvim/commit/f3c7169dd65f5ae528b6c930492359971014290b)) + + +### Bug Fixes + +* **help:** sort readme tags case sensitive. Fixes [#67](https://github.com/folke/lazy.nvim/issues/67) ([54ecfc7](https://github.com/folke/lazy.nvim/commit/54ecfc7c245e5e3fbbc749658ad171335418d48c)) +* **ui:** sort plugins case insensitive ([4f27fc3](https://github.com/folke/lazy.nvim/commit/4f27fc33c4e0e81802f4afadbe350de93447ac1e)) + ## [10.3.1](https://github.com/folke/lazy.nvim/compare/v10.3.0...v10.3.1) (2023-09-27) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index d0499fb..99b1766 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.3.1" -- x-release-please-version +M.version = "10.4.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 6a2c47e6424a3f1e373bfeb714b716f6be13501c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 29 Sep 2023 16:37:53 +0200 Subject: [PATCH 262/815] style: lua annotations --- lua/lazy/core/plugin.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 00039ef..b418759 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -325,7 +325,6 @@ end ---@param spec LazySpec|LazySpecImport ---@param results? string[] ----@param is_dep? boolean function Spec:normalize(spec, results) if type(spec) == "string" then if not spec:find("/", 1, true) then From 09e5010741e340eb603afbff34453dbee55b7011 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 30 Sep 2023 18:02:07 +0200 Subject: [PATCH 263/815] fix(plugin): prevent recursive loop with cond=false. Fixes #1061 --- lua/lazy/core/plugin.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index b418759..d0a2f0b 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -252,10 +252,12 @@ function Spec:fix_cond() local stack = { plugin } while #stack > 0 do local p = table.remove(stack) - for _, dep in ipairs(p.dependencies or {}) do - table.insert(stack, self.plugins[dep]) + if not self.ignore_installed[p.name] then + for _, dep in ipairs(p.dependencies or {}) do + table.insert(stack, self.plugins[dep]) + end + self.ignore_installed[p.name] = true end - self.ignore_installed[p.name] = true end plugin.enabled = false end From 1605df75ad3d1d4a4cd272177270c9adaa876855 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 30 Sep 2023 16:02:55 +0000 Subject: [PATCH 264/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 2f1cb7f..d8420db 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 September 29 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 September 30 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 59335c5b9d116f5d3948f833288a89e2a829a005 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 30 Sep 2023 18:08:27 +0200 Subject: [PATCH 265/815] chore(main): release 10.4.1 (#1062) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 045befb..f2c5854 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.4.1](https://github.com/folke/lazy.nvim/compare/v10.4.0...v10.4.1) (2023-09-30) + + +### Bug Fixes + +* **plugin:** prevent recursive loop with cond=false. Fixes [#1061](https://github.com/folke/lazy.nvim/issues/1061) ([09e5010](https://github.com/folke/lazy.nvim/commit/09e5010741e340eb603afbff34453dbee55b7011)) + ## [10.4.0](https://github.com/folke/lazy.nvim/compare/v10.3.1...v10.4.0) (2023-09-29) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 99b1766..3c8261d 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.4.0" -- x-release-please-version +M.version = "10.4.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 8b73492249100d8a9ce9d874f7ea5a71b4d6f07e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 4 Oct 2023 00:19:29 +0200 Subject: [PATCH 266/815] perf(util): don't try to load nvim-treesitter when markdown parser is builtin --- lua/lazy/core/util.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 3e0042e..d1d6bec 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -315,7 +315,12 @@ function M.notify(msg, opts) local lang = opts.lang or "markdown" vim.notify(msg, opts.level or vim.log.levels.INFO, { on_open = function(win) - pcall(require, "nvim-treesitter") + local ok = pcall(function() + vim.treesitter.language.add("markdown") + end) + if not ok then + pcall(require, "nvim-treesitter") + end vim.wo[win].conceallevel = 3 vim.wo[win].concealcursor = "" vim.wo[win].spell = false From 8eb8de29af6e2ab9dd7986e2521178875dbcad95 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 4 Oct 2023 00:20:08 +0200 Subject: [PATCH 267/815] feat(plugin): keep track of the module a spec fragment was defined in --- lua/lazy/core/plugin.lua | 1 + lua/lazy/types.lua | 1 + 2 files changed, 2 insertions(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index d0a2f0b..4255366 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -137,6 +137,7 @@ function Spec:add(plugin, results) fid = M.last_fid, fpid = fpid, dep = fpid ~= nil, + module = self.importing, } self.fragments[plugin._.fid] = plugin diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 0fa9202..e9c5fbb 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -17,6 +17,7 @@ ---@field dep? boolean True if this plugin is only in the spec as a dependency ---@field cond? boolean ---@field super? LazyPlugin +---@field module? string ---@alias PluginOpts table|fun(self:LazyPlugin, opts:table):table? From f4ed421453fd0804239821bca8135f87a99c9c47 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 3 Oct 2023 22:20:59 +0000 Subject: [PATCH 268/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index d8420db..e878673 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 September 30 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 03 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 28a80136b5253a8de6dea87f335919ac9f67116d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 00:30:12 +0200 Subject: [PATCH 269/815] chore(main): release 10.5.0 (#1069) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f2c5854..cd7c0c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [10.5.0](https://github.com/folke/lazy.nvim/compare/v10.4.1...v10.5.0) (2023-10-03) + + +### Features + +* **plugin:** keep track of the module a spec fragment was defined in ([8eb8de2](https://github.com/folke/lazy.nvim/commit/8eb8de29af6e2ab9dd7986e2521178875dbcad95)) + + +### Performance Improvements + +* **util:** don't try to load nvim-treesitter when markdown parser is builtin ([8b73492](https://github.com/folke/lazy.nvim/commit/8b73492249100d8a9ce9d874f7ea5a71b4d6f07e)) + ## [10.4.1](https://github.com/folke/lazy.nvim/compare/v10.4.0...v10.4.1) (2023-09-30) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 3c8261d..549b5a1 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.4.1" -- x-release-please-version +M.version = "10.5.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 638c8e6382f121aef983c78d865f6dbbc72d68c3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 4 Oct 2023 11:48:14 +0200 Subject: [PATCH 270/815] fix(plugin): rebuild plugins after fixing optional and cond to ensure enabled will work correctly --- lua/lazy/core/plugin.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 4255366..0517aa3 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -292,7 +292,12 @@ function Spec:fix_disabled() end self:fix_optional() + -- rebuild any plugin specs that were modified + for name, _ in pairs(self.dirty) do + self:rebuild(name) + end self:fix_cond() + self.dirty = {} for _, plugin in pairs(self.plugins) do local disabled = plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled()) From d8453bc1379c3baa40514c8510046e9ffd93affd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 4 Oct 2023 09:49:03 +0000 Subject: [PATCH 271/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index e878673..c85ef68 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 03 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 04 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 82da5a004867be2cc96c345430d9381f991cf2e6 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 4 Oct 2023 12:50:46 +0200 Subject: [PATCH 272/815] refactor(plugin): refactored rebuild --- lua/lazy/core/plugin.lua | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 0517aa3..95a21ec 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -172,8 +172,14 @@ function Spec:warn(msg) end --- Rebuilds a plugin spec excluding any removed fragments ----@param name string +---@param name? string function Spec:rebuild(name) + if not name then + for n, _ in pairs(self.dirty) do + self:rebuild(n) + end + self.dirty = {} + end local plugin = self.plugins[name] if not plugin then return @@ -292,11 +298,11 @@ function Spec:fix_disabled() end self:fix_optional() - -- rebuild any plugin specs that were modified - for name, _ in pairs(self.dirty) do - self:rebuild(name) - end + self:rebuild() + self:fix_cond() + self:rebuild() + self.dirty = {} for _, plugin in pairs(self.plugins) do @@ -311,9 +317,7 @@ function Spec:fix_disabled() end -- rebuild any plugin specs that were modified - for name, _ in pairs(self.dirty) do - self:rebuild(name) - end + self:rebuild() end ---@param msg string From 64cb9b16f6d4f1c395de4ec672d9d79fffb5c3b4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Oct 2023 21:15:11 +0200 Subject: [PATCH 273/815] chore(main): release 10.5.1 (#1071) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd7c0c7..6f4cff6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.5.1](https://github.com/folke/lazy.nvim/compare/v10.5.0...v10.5.1) (2023-10-04) + + +### Bug Fixes + +* **plugin:** rebuild plugins after fixing optional and cond to ensure enabled will work correctly ([638c8e6](https://github.com/folke/lazy.nvim/commit/638c8e6382f121aef983c78d865f6dbbc72d68c3)) + ## [10.5.0](https://github.com/folke/lazy.nvim/compare/v10.4.1...v10.5.0) (2023-10-03) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 549b5a1..0ee4d74 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.5.0" -- x-release-please-version +M.version = "10.5.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 19d1b3aa72790cab245e52af8438a4686a364b44 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 4 Oct 2023 21:43:14 +0200 Subject: [PATCH 274/815] style: lua annotations --- lua/lazy/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index 226069b..a2e0940 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -1,4 +1,4 @@ ----@type LazyCommands +---@class Lazy: LazyCommands local M = {} M._start = 0 From c42e63c1986af6ba417d9c2a0062ac41f79df18b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 5 Oct 2023 14:00:08 +0200 Subject: [PATCH 275/815] feat(keys): you can now create buffer-local filetype keymaps by specifying `ft=`. Fixes #1076 --- README.md | 1 + lua/lazy/core/handler/keys.lua | 72 ++++++++++++++++++++++++---------- 2 files changed, 52 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 0f25814..fb1a377 100644 --- a/README.md +++ b/README.md @@ -147,6 +147,7 @@ can be a `LazyKeys` table with the following key-value pairs: - **[1]**: (`string`) lhs **_(required)_** - **[2]**: (`string|fun()`) rhs **_(optional)_** - **mode**: (`string|string[]`) mode **_(optional, defaults to `"n"`)_** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **_(optional)_** - any other option valid for `vim.keymap.set` Key mappings will load the plugin the first time they get executed. diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index cdf2243..5db4f0f 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -9,6 +9,7 @@ local Loader = require("lazy.core.loader") ---@field noremap? boolean ---@field remap? boolean ---@field expr? boolean +---@field ft? string|string[] ---@field id string ---@class LazyKeysHandler:LazyHandler @@ -53,7 +54,7 @@ end function M.opts(keys) local opts = {} for k, v in pairs(keys) do - if type(k) ~= "number" and k ~= "mode" and k ~= "id" then + if type(k) ~= "number" and k ~= "mode" and k ~= "id" and k ~= "ft" then opts[k] = v end end @@ -64,33 +65,62 @@ end function M:_add(keys) local lhs = keys[1] local opts = M.opts(keys) - vim.keymap.set(keys.mode, lhs, function() - local plugins = self.active[keys.id] - -- always delete the mapping immediately to prevent recursive mappings - self:_del(keys) - self.active[keys.id] = nil + ---@param buf? number + local function add(buf) + vim.keymap.set(keys.mode, lhs, function() + local plugins = self.active[keys.id] - Util.track({ keys = lhs }) - Loader.load(plugins, { keys = lhs }) - Util.track() + -- always delete the mapping immediately to prevent recursive mappings + self:_del(keys, buf) + self.active[keys.id] = nil - local feed = vim.api.nvim_replace_termcodes("" .. lhs, true, true, true) - -- insert instead of append the lhs - vim.api.nvim_feedkeys(feed, "i", false) - end, { - desc = opts.desc, - nowait = opts.nowait, - -- we do not return anything, but this is still needed to make operator pending mappings work - expr = true, - }) + if plugins then + Util.track({ keys = lhs }) + Loader.load(plugins, { keys = lhs }) + Util.track() + end + + local feed = vim.api.nvim_replace_termcodes("" .. lhs, true, true, true) + -- insert instead of append the lhs + vim.api.nvim_feedkeys(feed, "i", false) + end, { + desc = opts.desc, + nowait = opts.nowait, + -- we do not return anything, but this is still needed to make operator pending mappings work + expr = true, + buffer = buf, + }) + end + + if keys.ft then + vim.api.nvim_create_autocmd("FileType", { + pattern = keys.ft, + callback = function(event) + if self.active[keys.id] then + add(event.buf) + else + -- Only create the mapping if its managed by lazy + -- otherwise the plugin is supposed to manage it + if keys[2] then + self:_del(keys, event.buf) + end + end + end, + }) + else + add() + end end ---@param keys LazyKeys -function M:_del(keys) - pcall(vim.keymap.del, keys.mode, keys[1]) +---@param buf number? +function M:_del(keys, buf) + pcall(vim.keymap.del, keys.mode, keys[1], { buffer = buf }) if keys[2] then - vim.keymap.set(keys.mode, keys[1], keys[2], M.opts(keys)) + local opts = M.opts(keys) + opts.buffer = buf + vim.keymap.set(keys.mode, keys[1], keys[2], opts) end end From d9509b56cee2d3f8bcb43b6912a48bf3899f580b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 5 Oct 2023 12:01:02 +0000 Subject: [PATCH 276/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c85ef68..9ab1ff0 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 04 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 05 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -251,6 +251,7 @@ mappings, or it can be a `LazyKeys` table with the following key-value pairs: - **[1]**(`string`) lhs **(required)** - **[2]**(`string|fun()`) rhs **(optional)** - **mode**(`string|string[]`) mode **(optional, defaults to "n")** +- **ft**(`string|string[]`) `filetype` for buffer-local keymaps **(optional)** - any other option valid for `vim.keymap.set` Key mappings will load the plugin the first time they get executed. From 6b6f0a451200bb6abde85978c577c73ea1577758 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 5 Oct 2023 16:05:05 +0200 Subject: [PATCH 277/815] chore(main): release 10.6.0 (#1078) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f4cff6..9863843 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.6.0](https://github.com/folke/lazy.nvim/compare/v10.5.1...v10.6.0) (2023-10-05) + + +### Features + +* **keys:** you can now create buffer-local filetype keymaps by specifying `ft=`. Fixes [#1076](https://github.com/folke/lazy.nvim/issues/1076) ([c42e63c](https://github.com/folke/lazy.nvim/commit/c42e63c1986af6ba417d9c2a0062ac41f79df18b)) + ## [10.5.1](https://github.com/folke/lazy.nvim/compare/v10.5.0...v10.5.1) (2023-10-04) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 0ee4d74..0600a49 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.5.1" -- x-release-please-version +M.version = "10.6.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From ef2a5d0bd1a4995539b93be69fc760be7d9f62be Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 6 Oct 2023 15:39:18 +0200 Subject: [PATCH 278/815] fix(event): better dealing with even handlers. Fixes #788 --- lua/lazy/core/handler/event.lua | 78 +++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 0e26c68..050c3f6 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -7,10 +7,6 @@ local Loader = require("lazy.core.loader") ---@field group number local M = {} -M.trigger_events = { - BufRead = { "BufReadPre", "BufRead" }, - BufReadPost = { "BufReadPre", "BufRead", "BufReadPost" }, -} M.group = vim.api.nvim_create_augroup("lazy_handler_event", { clear = true }) ---@param value string @@ -28,11 +24,17 @@ function M:_add(value) return end Util.track({ [self.type] = value }) - local groups = M.get_augroups(event, pattern) + local groups = M.get_augroups(ev.event, pattern) -- load the plugins Loader.load(self.active[value], { [self.type] = value }) -- check if any plugin created an event handler for this event and fire the group - self:trigger(event, pattern, groups, ev.data) + M.trigger({ + event = ev.event, + pattern = pattern, + exclude = groups, + data = ev.data, + buf = ev.buf, + }) Util.track() end, }) @@ -40,47 +42,55 @@ end ---@param value string function M:_event(value) - return value == "VeryLazy" and "User VeryLazy" or value + if value == "VeryLazy" then + return "User VeryLazy" + elseif value == "BufRead" then + return "BufReadPost" + end + return value end -- Get all augroups for the events ---@param event string ---@param pattern? string function M.get_augroups(event, pattern) - local events = M.trigger_events[event] or { event } - ---@type table - local groups = {} - for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = events, pattern = pattern })) do + local groups = {} ---@type number[] + for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = event, pattern = pattern })) do if autocmd.group then - groups[autocmd.group] = true + table.insert(groups, autocmd.group) end end return groups end ----@param event string|string[] ----@param pattern? string ----@param groups table -function M:trigger(event, pattern, groups, data) - local events = M.trigger_events[event] or { event } - ---@cast events string[] - for _, e in ipairs(events) do - for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = e, pattern = pattern })) do - if autocmd.event == e and autocmd.group and not groups[autocmd.group] then - if Config.options.debug then - Util.info({ - "# Firing Events", - " - **group:** `" .. autocmd.group_name .. "`", - " - **event:** " .. autocmd.event, - pattern and (" - **pattern:** " .. pattern), - }) - end - Util.track({ event = autocmd.group_name }) - Util.try(function() - vim.api.nvim_exec_autocmds(autocmd.event, { group = autocmd.group, modeline = false, data = data }) - Util.track() - end) +---@param opts {event:string, pattern?:string, exclude?:string[], data?:any, buf?:number} +function M.trigger(opts) + local done = {} ---@type table + for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = opts.event, pattern = opts.pattern })) do + local id = autocmd.event .. ":" .. (autocmd.group or "") ---@type string + local skip = done[id] or (opts.exclude and vim.list_contains(opts.exclude, autocmd.group)) + done[id] = true + if autocmd.group and not skip then + if Config.options.debug then + Util.info({ + "# Firing Events", + " - **group:** `" .. autocmd.group_name .. "`", + " - **event:** " .. autocmd.event, + opts.pattern and (" - **pattern:** " .. opts.pattern), + opts.buf and (" - **buf:** " .. opts.buf), + }) end + Util.track({ event = autocmd.group_name }) + Util.try(function() + vim.api.nvim_exec_autocmds(autocmd.event, { + -- pattern = opts.pattern, + buffer = opts.buf, + group = autocmd.group, + modeline = false, + data = opts.data, + }) + Util.track() + end) end end end From acda8d29ca6f1aedada0b92b77722384d605275b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 6 Oct 2023 13:41:21 +0000 Subject: [PATCH 279/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 9ab1ff0..c4a57f0 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 05 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 06 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 58e954a735767fd23c24c455dc09c5323951ec83 Mon Sep 17 00:00:00 2001 From: abeldekat <58370433+abeldekat@users.noreply.github.com> Date: Fri, 6 Oct 2023 15:46:46 +0200 Subject: [PATCH 280/815] feat(plugin): added support for `cond` for imports (#1079) Co-authored-by: abeldekat --- lua/lazy/core/plugin.lua | 3 +++ lua/lazy/types.lua | 1 + 2 files changed, 4 insertions(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 95a21ec..12ba1a8 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -380,6 +380,9 @@ function Spec:import(spec) if vim.tbl_contains(self.modules, spec.import) then return end + if spec.cond == false or (type(spec.cond) == "function" and not spec.cond()) then + return + end if spec.enabled == false or (type(spec.enabled) == "function" and not spec.enabled()) then return end diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index e9c5fbb..30363b6 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -75,3 +75,4 @@ ---@class LazySpecImport ---@field import string spec module to import ---@field enabled? boolean|(fun():boolean) +---@field cond? boolean|(fun():boolean) From 2b2adb9d4d6ccd469b1e82416c58ea74fe5a0e1b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 6 Oct 2023 15:48:41 +0200 Subject: [PATCH 281/815] fix(event): use tbl_contains instead of list_contains --- lua/lazy/core/handler/event.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 050c3f6..62d3ea3 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -68,7 +68,7 @@ function M.trigger(opts) local done = {} ---@type table for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = opts.event, pattern = opts.pattern })) do local id = autocmd.event .. ":" .. (autocmd.group or "") ---@type string - local skip = done[id] or (opts.exclude and vim.list_contains(opts.exclude, autocmd.group)) + local skip = done[id] or (opts.exclude and vim.tbl_contains(opts.exclude, autocmd.group)) done[id] = true if autocmd.group and not skip then if Config.options.debug then From 25f6009087cc2bb85aedf4425c23f35c03e60b02 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 15:53:37 +0200 Subject: [PATCH 282/815] chore(main): release 10.7.0 (#1081) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9863843..b595e0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [10.7.0](https://github.com/folke/lazy.nvim/compare/v10.6.0...v10.7.0) (2023-10-06) + + +### Features + +* **plugin:** added support for `cond` for imports ([#1079](https://github.com/folke/lazy.nvim/issues/1079)) ([58e954a](https://github.com/folke/lazy.nvim/commit/58e954a735767fd23c24c455dc09c5323951ec83)) + + +### Bug Fixes + +* **event:** better dealing with even handlers. Fixes [#788](https://github.com/folke/lazy.nvim/issues/788) ([ef2a5d0](https://github.com/folke/lazy.nvim/commit/ef2a5d0bd1a4995539b93be69fc760be7d9f62be)) +* **event:** use tbl_contains instead of list_contains ([2b2adb9](https://github.com/folke/lazy.nvim/commit/2b2adb9d4d6ccd469b1e82416c58ea74fe5a0e1b)) + ## [10.6.0](https://github.com/folke/lazy.nvim/compare/v10.5.1...v10.6.0) (2023-10-05) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 0600a49..922bc6f 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.6.0" -- x-release-please-version +M.version = "10.7.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 6b37927be9e0166ddb4445023904345d88045497 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 6 Oct 2023 19:42:19 +0200 Subject: [PATCH 283/815] fix(event): prevent loading event handler more than once in some cases --- lua/lazy/core/handler/event.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 62d3ea3..8b40d9a 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -15,14 +15,16 @@ function M:_add(value) ---@type string?, string? local event, pattern = event_spec:match("^(%w+)%s+(.*)$") event = event or event_spec + local done = false vim.api.nvim_create_autocmd(event, { group = self.group, once = true, pattern = pattern, callback = function(ev) - if not self.active[value] then + if done or not self.active[value] then return end + done = true Util.track({ [self.type] = value }) local groups = M.get_augroups(ev.event, pattern) -- load the plugins From 6687afae42b72fb660bfae2bd0eb98e77156829b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 20:22:13 +0200 Subject: [PATCH 284/815] chore(main): release 10.7.1 (#1083) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b595e0c..bdeccb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.7.1](https://github.com/folke/lazy.nvim/compare/v10.7.0...v10.7.1) (2023-10-06) + + +### Bug Fixes + +* **event:** prevent loading event handler more than once in some cases ([6b37927](https://github.com/folke/lazy.nvim/commit/6b37927be9e0166ddb4445023904345d88045497)) + ## [10.7.0](https://github.com/folke/lazy.nvim/compare/v10.6.0...v10.7.0) (2023-10-06) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 922bc6f..42bc512 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.7.0" -- x-release-please-version +M.version = "10.7.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From e4ea874e33fd3116d0e113f4b03eff2d6b1e3399 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 7 Oct 2023 09:48:53 +0200 Subject: [PATCH 285/815] fix(ft): fix ft handlers to properly use new events. Fixes #1084 --- lua/lazy/core/handler/event.lua | 24 ++++++++++++++++++------ lua/lazy/core/handler/ft.lua | 30 +++++++++++++++--------------- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 8b40d9a..ee0b1e4 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -2,6 +2,13 @@ local Util = require("lazy.core.util") local Config = require("lazy.core.config") local Loader = require("lazy.core.loader") +---@class LazyEventOpts +---@field event string +---@field pattern? string +---@field exclude? string[] +---@field data? any +---@field buf? number} + ---@class LazyEventHandler:LazyHandler ---@field events table ---@field group number @@ -30,7 +37,7 @@ function M:_add(value) -- load the plugins Loader.load(self.active[value], { [self.type] = value }) -- check if any plugin created an event handler for this event and fire the group - M.trigger({ + self:_trigger({ event = ev.event, pattern = pattern, exclude = groups, @@ -56,21 +63,26 @@ end ---@param event string ---@param pattern? string function M.get_augroups(event, pattern) - local groups = {} ---@type number[] + local groups = {} ---@type string[] for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = event, pattern = pattern })) do - if autocmd.group then - table.insert(groups, autocmd.group) + if autocmd.group_name then + table.insert(groups, autocmd.group_name) end end return groups end ----@param opts {event:string, pattern?:string, exclude?:string[], data?:any, buf?:number} +---@param opts LazyEventOpts +function M:_trigger(opts) + M.trigger(opts) +end + +---@param opts LazyEventOpts function M.trigger(opts) local done = {} ---@type table for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = opts.event, pattern = opts.pattern })) do local id = autocmd.event .. ":" .. (autocmd.group or "") ---@type string - local skip = done[id] or (opts.exclude and vim.tbl_contains(opts.exclude, autocmd.group)) + local skip = done[id] or (opts.exclude and vim.tbl_contains(opts.exclude, autocmd.group_name)) done[id] = true if autocmd.group and not skip then if Config.options.debug then diff --git a/lua/lazy/core/handler/ft.lua b/lua/lazy/core/handler/ft.lua index 66fd13a..25739ce 100644 --- a/lua/lazy/core/handler/ft.lua +++ b/lua/lazy/core/handler/ft.lua @@ -20,21 +20,21 @@ function M:add(plugin) end end ----@param pattern? string -function M:trigger(_, pattern, _) - for _, group in ipairs({ "filetypeplugin", "filetypeindent" }) do - Util.try(function() - if Config.options.debug then - Util.info({ - "# Firing Events", - " - **group:** `" .. group .. "`", - " - **event:** FileType", - pattern and (" - **pattern:** " .. pattern), - }) - end - vim.api.nvim_exec_autocmds("FileType", { group = group, modeline = false, pattern = pattern }) - end) - end +---@param opts LazyEventOpts +function M:_trigger(opts) + Util.try(function() + if Config.options.debug then + Util.info({ + "# Firing Events", + " - **event:** FileType", + opts.pattern and (" - **pattern:** " .. opts.pattern), + opts.buf and (" - **buf:** " .. opts.buf), + }) + end + Util.track({ event = "FileType" }) + vim.api.nvim_exec_autocmds("FileType", { modeline = false, buffer = opts.buf }) + Util.track() + end) end return M From f2132946c7ba0c891f79a7f89634aaeb825b6dee Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 7 Oct 2023 07:49:38 +0000 Subject: [PATCH 286/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c4a57f0..66aca31 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 06 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 07 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 8871602e541c9c7ecd036d631b527454312f88b2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 7 Oct 2023 11:15:12 +0200 Subject: [PATCH 287/815] fix(event): move all ft logic to the event handler --- lua/lazy/core/handler/event.lua | 112 +++++++++++++++++++++----------- lua/lazy/core/handler/ft.lua | 19 ------ 2 files changed, 74 insertions(+), 57 deletions(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index ee0b1e4..2fdaa51 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -5,15 +5,22 @@ local Loader = require("lazy.core.loader") ---@class LazyEventOpts ---@field event string ---@field pattern? string +---@field group? string ---@field exclude? string[] ---@field data? any ----@field buf? number} +---@field buffer? number ---@class LazyEventHandler:LazyHandler ---@field events table ---@field group number local M = {} +-- Event dependencies +M.triggers = { + FileType = "BufReadPost", + BufReadPost = "BufReadPre", +} + M.group = vim.api.nvim_create_augroup("lazy_handler_event", { clear = true }) ---@param value string @@ -33,22 +40,45 @@ function M:_add(value) end done = true Util.track({ [self.type] = value }) - local groups = M.get_augroups(ev.event, pattern) + + local state = M.get_state(ev.event, pattern, ev.buf, ev.data) + -- load the plugins Loader.load(self.active[value], { [self.type] = value }) + -- check if any plugin created an event handler for this event and fire the group - self:_trigger({ - event = ev.event, - pattern = pattern, - exclude = groups, - data = ev.data, - buf = ev.buf, - }) + for _, s in ipairs(state) do + M.trigger(s) + end Util.track() end, }) end +-- Get the current state of the event and all the events that will be fired +---@param event string +---@param pattern? string +---@param buf number +---@param data any +function M.get_state(event, pattern, buf, data) + local state = {} ---@type LazyEventOpts[] + while event do + table.insert(state, 1, { + event = event, + pattern = pattern, + exclude = event ~= "FileType" and M.get_augroups(event) or nil, + buffer = buf, + data = data, + }) + data = nil -- only pass the data to the first event + if event == "FileType" then + pattern = nil -- only use the pattern for the first event + end + event = M.triggers[event] + end + return state +end + ---@param value string function M:_event(value) if value == "VeryLazy" then @@ -61,10 +91,9 @@ end -- Get all augroups for the events ---@param event string ----@param pattern? string -function M.get_augroups(event, pattern) +function M.get_augroups(event) local groups = {} ---@type string[] - for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = event, pattern = pattern })) do + for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = event })) do if autocmd.group_name then table.insert(groups, autocmd.group_name) end @@ -72,41 +101,48 @@ function M.get_augroups(event, pattern) return groups end ----@param opts LazyEventOpts -function M:_trigger(opts) - M.trigger(opts) -end - +-- Trigger an event. When a group is given, only the events in that group will be triggered. +-- When exclude is set, the events in those groups will be skipped. ---@param opts LazyEventOpts function M.trigger(opts) + if opts.group or opts.exclude == nil then + return M._trigger(opts) + end local done = {} ---@type table - for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = opts.event, pattern = opts.pattern })) do + for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = opts.event })) do local id = autocmd.event .. ":" .. (autocmd.group or "") ---@type string local skip = done[id] or (opts.exclude and vim.tbl_contains(opts.exclude, autocmd.group_name)) done[id] = true if autocmd.group and not skip then - if Config.options.debug then - Util.info({ - "# Firing Events", - " - **group:** `" .. autocmd.group_name .. "`", - " - **event:** " .. autocmd.event, - opts.pattern and (" - **pattern:** " .. opts.pattern), - opts.buf and (" - **buf:** " .. opts.buf), - }) - end - Util.track({ event = autocmd.group_name }) - Util.try(function() - vim.api.nvim_exec_autocmds(autocmd.event, { - -- pattern = opts.pattern, - buffer = opts.buf, - group = autocmd.group, - modeline = false, - data = opts.data, - }) - Util.track() - end) + opts.group = autocmd.group_name + M._trigger(opts) end end end +-- Trigger an event +---@param opts LazyEventOpts +function M._trigger(opts) + if Config.options.debug then + Util.info({ + "# Firing Events", + " - **event:** " .. opts.event, + opts.pattern and (" - **pattern:** " .. opts.pattern), + opts.group and (" - **group:** " .. opts.group), + opts.buffer and (" - **buffer:** " .. opts.buffer), + }) + end + Util.track({ event = opts.group or opts.event }) + Util.try(function() + vim.api.nvim_exec_autocmds(opts.event, { + -- pattern = opts.pattern, + buffer = opts.buffer, + group = opts.group, + modeline = false, + data = opts.data, + }) + Util.track() + end) +end + return M diff --git a/lua/lazy/core/handler/ft.lua b/lua/lazy/core/handler/ft.lua index 25739ce..f0947c6 100644 --- a/lua/lazy/core/handler/ft.lua +++ b/lua/lazy/core/handler/ft.lua @@ -1,7 +1,5 @@ local Event = require("lazy.core.handler.event") -local Util = require("lazy.core.util") local Loader = require("lazy.core.loader") -local Config = require("lazy.core.config") ---@class LazyFiletypeHandler:LazyEventHandler local M = {} @@ -20,21 +18,4 @@ function M:add(plugin) end end ----@param opts LazyEventOpts -function M:_trigger(opts) - Util.try(function() - if Config.options.debug then - Util.info({ - "# Firing Events", - " - **event:** FileType", - opts.pattern and (" - **pattern:** " .. opts.pattern), - opts.buf and (" - **buf:** " .. opts.buf), - }) - end - Util.track({ event = "FileType" }) - vim.api.nvim_exec_autocmds("FileType", { modeline = false, buffer = opts.buf }) - Util.track() - end) -end - return M From 5aaafcb3019e04dd38a011b3d4c8a0f130c422ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 7 Oct 2023 11:44:13 +0200 Subject: [PATCH 288/815] chore(main): release 10.7.2 (#1086) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bdeccb7..b9a823e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [10.7.2](https://github.com/folke/lazy.nvim/compare/v10.7.1...v10.7.2) (2023-10-07) + + +### Bug Fixes + +* **event:** move all ft logic to the event handler ([8871602](https://github.com/folke/lazy.nvim/commit/8871602e541c9c7ecd036d631b527454312f88b2)) +* **ft:** fix ft handlers to properly use new events. Fixes [#1084](https://github.com/folke/lazy.nvim/issues/1084) ([e4ea874](https://github.com/folke/lazy.nvim/commit/e4ea874e33fd3116d0e113f4b03eff2d6b1e3399)) + ## [10.7.1](https://github.com/folke/lazy.nvim/compare/v10.7.0...v10.7.1) (2023-10-06) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 42bc512..773d885 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.7.1" -- x-release-please-version +M.version = "10.7.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 09e30f88cd4b47704005c41f0486a628b0b8d774 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 7 Oct 2023 20:41:06 +0200 Subject: [PATCH 289/815] fix(keys): fixed buffer-local mappings --- lua/lazy/core/handler/keys.lua | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 5db4f0f..35d7fb0 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -72,7 +72,7 @@ function M:_add(keys) local plugins = self.active[keys.id] -- always delete the mapping immediately to prevent recursive mappings - self:_del(keys, buf) + self:_del(keys) self.active[keys.id] = nil if plugins then @@ -81,6 +81,11 @@ function M:_add(keys) Util.track() end + -- Create the real buffer-local mapping + if keys.ft then + self:_set(keys, buf) + end + local feed = vim.api.nvim_replace_termcodes("" .. lhs, true, true, true) -- insert instead of append the lhs vim.api.nvim_feedkeys(feed, "i", false) @@ -93,6 +98,7 @@ function M:_add(keys) }) end + -- buffer-local mappings if keys.ft then vim.api.nvim_create_autocmd("FileType", { pattern = keys.ft, @@ -102,9 +108,7 @@ function M:_add(keys) else -- Only create the mapping if its managed by lazy -- otherwise the plugin is supposed to manage it - if keys[2] then - self:_del(keys, event.buf) - end + self:_set(keys, event.buf) end end, }) @@ -113,10 +117,22 @@ function M:_add(keys) end end +-- Delete a mapping and create the real global +-- mapping when needed +---@param keys LazyKeys +function M:_del(keys) + pcall(vim.keymap.del, keys.mode, keys[1]) + -- make sure to create global mappings when needed + -- buffer-local mappings are managed by lazy + if not keys.ft then + self:_set(keys) + end +end + +-- Create a mapping if it is managed by lazy ---@param keys LazyKeys ---@param buf number? -function M:_del(keys, buf) - pcall(vim.keymap.del, keys.mode, keys[1], { buffer = buf }) +function M:_set(keys, buf) if keys[2] then local opts = M.opts(keys) opts.buffer = buf From 62745a7320f48a00ac4f7b0591352608cbc6bcea Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 7 Oct 2023 20:45:37 +0200 Subject: [PATCH 290/815] chore(main): release 10.7.3 (#1087) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9a823e..6b6da43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.7.3](https://github.com/folke/lazy.nvim/compare/v10.7.2...v10.7.3) (2023-10-07) + + +### Bug Fixes + +* **keys:** fixed buffer-local mappings ([09e30f8](https://github.com/folke/lazy.nvim/commit/09e30f88cd4b47704005c41f0486a628b0b8d774)) + ## [10.7.2](https://github.com/folke/lazy.nvim/compare/v10.7.1...v10.7.2) (2023-10-07) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 773d885..d44efc0 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.7.2" -- x-release-please-version +M.version = "10.7.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From b79099cc9d768241162bb45d284d6a243736b9fb Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 8 Oct 2023 10:11:25 +0200 Subject: [PATCH 291/815] feat(keys): refactor code and allow disabling keymaps per mode. mode no longer needs to be exactly the same in order to disable. --- lua/lazy/core/handler/init.lua | 3 ++ lua/lazy/core/handler/keys.lua | 96 ++++++++++++++++++++++------------ lua/lazy/types.lua | 2 +- lua/lazy/view/render.lua | 2 +- 4 files changed, 68 insertions(+), 35 deletions(-) diff --git a/lua/lazy/core/handler/init.lua b/lua/lazy/core/handler/init.lua index 9c6b92d..9a3fd5a 100644 --- a/lua/lazy/core/handler/init.lua +++ b/lua/lazy/core/handler/init.lua @@ -5,6 +5,7 @@ local Config = require("lazy.core.config") ---@field type LazyHandlerTypes ---@field extends? LazyHandler ---@field active table> +---@field managed table ---@field super LazyHandler local M = {} @@ -64,6 +65,7 @@ function M.new(type) local self = setmetatable({}, { __index = setmetatable(handler, { __index = super }) }) self.super = super self.active = {} + self.managed = {} self.type = type return self end @@ -94,6 +96,7 @@ function M:add(plugin) self.active[key] = {} self:_add(value) end + self.managed[key] = self.managed[key] self.active[key][plugin.name] = plugin.name end end diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 35d7fb0..9253102 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -1,60 +1,89 @@ local Util = require("lazy.core.util") local Loader = require("lazy.core.loader") ----@class LazyKeys ----@field [1] string lhs ----@field [2]? string|fun()|false rhs +---@class LazyKeysBase ---@field desc? string ----@field mode? string|string[] ---@field noremap? boolean ---@field remap? boolean ---@field expr? boolean +---@field nowait? boolean ---@field ft? string|string[] + +---@class LazyKeysSpec: LazyKeysBase +---@field [1] string lhs +---@field [2]? string|fun()|false rhs +---@field mode? string|string[] + +---@class LazyKeys: LazyKeysBase +---@field lhs string lhs +---@field rhs? string|fun() rhs +---@field mode? string ---@field id string ---@class LazyKeysHandler:LazyHandler local M = {} ----@param value string|LazyKeys -function M.parse(value) - local ret = vim.deepcopy(value) - ret = type(ret) == "string" and { ret } or ret --[[@as LazyKeys]] - ret.mode = ret.mode or "n" - ret.id = vim.api.nvim_replace_termcodes(ret[1] or "", true, true, true) - if ret.mode then - local mode = ret.mode - if type(mode) == "table" then - ---@cast mode string[] - table.sort(mode) - mode = table.concat(mode, ", ") - end - if mode ~= "n" then - ret.id = ret.id .. " (" .. mode .. ")" - end +---@param value string|LazyKeysSpec +---@param mode? string +---@return LazyKeys +function M.parse(value, mode) + value = type(value) == "string" and { value } or value --[[@as LazyKeysSpec]] + local ret = vim.deepcopy(value) --[[@as LazyKeys]] + ret.lhs = ret[1] or "" + ret.rhs = ret[2] + ---@diagnostic disable-next-line: no-unknown + ret[1] = nil + ---@diagnostic disable-next-line: no-unknown + ret[2] = nil + ret.mode = mode or "n" + ret.id = vim.api.nvim_replace_termcodes(ret.lhs, true, true, true) + if ret.mode ~= "n" then + ret.id = ret.id .. " (" .. ret.mode .. ")" end return ret end +---@param lhs string +---@param mode? string +function M:have(lhs, mode) + local keys = M.parse(lhs, mode) + return self.managed[keys.id] +end + ---@param plugin LazyPlugin function M:values(plugin) - ---@type table + return M.resolve(plugin.keys) +end + +---@param spec? (string|LazyKeysSpec)[] +function M.resolve(spec) + ---@type LazyKeys[] local values = {} ---@diagnostic disable-next-line: no-unknown - for _, value in ipairs(plugin[self.type] or {}) do - local keys = M.parse(value) - if keys[2] == vim.NIL or keys[2] == false then - values[keys.id] = nil - else - values[keys.id] = keys + for _, value in ipairs(spec or {}) do + value = type(value) == "string" and { value } or value --[[@as LazyKeysSpec]] + value.mode = value.mode or "n" + local modes = (type(value.mode) == "table" and value.mode or { value.mode }) --[=[@as string[]]=] + for _, mode in ipairs(modes) do + local keys = M.parse(value, mode) + if keys.rhs == vim.NIL or keys.rhs == false then + values[keys.id] = nil + else + values[keys.id] = keys + end end end return values end +---@param keys LazyKeys function M.opts(keys) - local opts = {} + local skip = { mode = true, id = true, ft = true, rhs = true, lhs = true } + local opts = {} ---@type LazyKeysBase + ---@diagnostic disable-next-line: no-unknown for k, v in pairs(keys) do - if type(k) ~= "number" and k ~= "mode" and k ~= "id" and k ~= "ft" then + if type(k) ~= "number" and not skip[k] then + ---@diagnostic disable-next-line: no-unknown opts[k] = v end end @@ -63,7 +92,7 @@ end ---@param keys LazyKeys function M:_add(keys) - local lhs = keys[1] + local lhs = keys.lhs local opts = M.opts(keys) ---@param buf? number @@ -121,7 +150,7 @@ end -- mapping when needed ---@param keys LazyKeys function M:_del(keys) - pcall(vim.keymap.del, keys.mode, keys[1]) + pcall(vim.keymap.del, keys.mode, keys.lhs) -- make sure to create global mappings when needed -- buffer-local mappings are managed by lazy if not keys.ft then @@ -133,10 +162,11 @@ end ---@param keys LazyKeys ---@param buf number? function M:_set(keys, buf) - if keys[2] then + if keys.rhs then local opts = M.opts(keys) + ---@diagnostic disable-next-line: inject-field opts.buffer = buf - vim.keymap.set(keys.mode, keys[1], keys[2], opts) + vim.keymap.set(keys.mode, keys.lhs, keys.rhs, opts) end end diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 30363b6..3e7f74d 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -32,7 +32,7 @@ ---@field event? string[] ---@field cmd? string[] ---@field ft? string[] ----@field keys? (string|LazyKeys)[] +---@field keys? (string|LazyKeysSpec)[] ---@field module? false ---@class LazyPluginRef diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 5b1f9af..319d627 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -331,7 +331,7 @@ function M:reason(reason, opts) value = value:match("User (.*)") or value end if key == "keys" then - value = type(value) == "string" and value or value[1] + value = type(value) == "string" and value or value.lhs end local hl = "LazyReason" .. key:sub(1, 1):upper() .. key:sub(2) local icon = Config.options.ui.icons[key] From cd7493da78ab1117c404f0c470ddc2dabd9f3cfe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 8 Oct 2023 08:12:09 +0000 Subject: [PATCH 292/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 66aca31..4a4a451 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 07 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 08 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 4b5b03f60319bdf67cada9d72e549dc21a92d5f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 10:13:01 +0200 Subject: [PATCH 293/815] chore(main): release 10.8.0 (#1088) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b6da43..c47ce35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.8.0](https://github.com/folke/lazy.nvim/compare/v10.7.3...v10.8.0) (2023-10-08) + + +### Features + +* **keys:** refactor code and allow disabling keymaps per mode. mode no longer needs to be exactly the same in order to disable. ([b79099c](https://github.com/folke/lazy.nvim/commit/b79099cc9d768241162bb45d284d6a243736b9fb)) + ## [10.7.3](https://github.com/folke/lazy.nvim/compare/v10.7.2...v10.7.3) (2023-10-07) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index d44efc0..5797511 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.7.3" -- x-release-please-version +M.version = "10.8.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 26762c97e6dc3fddf141db0e82d044ee73e5f78d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 8 Oct 2023 12:36:21 +0200 Subject: [PATCH 294/815] fix(ui): use correct keymap for display. Fixes #1089 --- lua/lazy/view/render.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 319d627..852a5d2 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -331,7 +331,7 @@ function M:reason(reason, opts) value = value:match("User (.*)") or value end if key == "keys" then - value = type(value) == "string" and value or value.lhs + value = type(value) == "string" and value or value.lhs or value[1] end local hl = "LazyReason" .. key:sub(1, 1):upper() .. key:sub(2) local icon = Config.options.ui.icons[key] From 9102d051a8e27298f4c913e3017ac44f151ae820 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 12:57:44 +0200 Subject: [PATCH 295/815] chore(main): release 10.8.1 (#1090) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c47ce35..e2b225b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.8.1](https://github.com/folke/lazy.nvim/compare/v10.8.0...v10.8.1) (2023-10-08) + + +### Bug Fixes + +* **ui:** use correct keymap for display. Fixes [#1089](https://github.com/folke/lazy.nvim/issues/1089) ([26762c9](https://github.com/folke/lazy.nvim/commit/26762c97e6dc3fddf141db0e82d044ee73e5f78d)) + ## [10.8.0](https://github.com/folke/lazy.nvim/compare/v10.7.3...v10.8.0) (2023-10-08) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 5797511..4410939 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.8.0" -- x-release-please-version +M.version = "10.8.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 9d92e65fd17d35f97bed43dc92810576a57376fc Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 8 Oct 2023 19:14:33 +0200 Subject: [PATCH 296/815] fix(keys): fixed adding managed keys --- lua/lazy/core/handler/init.lua | 2 +- lua/lazy/core/handler/keys.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/handler/init.lua b/lua/lazy/core/handler/init.lua index 9a3fd5a..dce3415 100644 --- a/lua/lazy/core/handler/init.lua +++ b/lua/lazy/core/handler/init.lua @@ -95,8 +95,8 @@ function M:add(plugin) if not self.active[key] then self.active[key] = {} self:_add(value) + self.managed[key] = key end - self.managed[key] = self.managed[key] self.active[key][plugin.name] = plugin.name end end diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 9253102..30a4b4f 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -47,7 +47,7 @@ end ---@param mode? string function M:have(lhs, mode) local keys = M.parse(lhs, mode) - return self.managed[keys.id] + return self.managed[keys.id] ~= nil end ---@param plugin LazyPlugin From 0a07fa6cd74db668e4859896d30f8f6ed2b60b13 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 19:32:24 +0200 Subject: [PATCH 297/815] chore(main): release 10.8.2 (#1091) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2b225b..ea2dadb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.8.2](https://github.com/folke/lazy.nvim/compare/v10.8.1...v10.8.2) (2023-10-08) + + +### Bug Fixes + +* **keys:** fixed adding managed keys ([9d92e65](https://github.com/folke/lazy.nvim/commit/9d92e65fd17d35f97bed43dc92810576a57376fc)) + ## [10.8.1](https://github.com/folke/lazy.nvim/compare/v10.8.0...v10.8.1) (2023-10-08) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4410939..e676ab9 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -161,7 +161,7 @@ M.defaults = { debug = false, } -M.version = "10.8.1" -- x-release-please-version +M.version = "10.8.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From f0cfbf995238a42064e119bd1daa694fd1683ea3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 8 Oct 2023 20:22:01 +0200 Subject: [PATCH 298/815] perf: lazy require commands --- lua/lazy/core/util.lua | 13 +++++++++++++ lua/lazy/view/commands.lua | 1 + 2 files changed, 14 insertions(+) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index d1d6bec..a11d3ae 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -411,4 +411,17 @@ function M.merge(...) return ret end +function M.lazy_require(module) + local mod = nil + -- if already loaded, return the module + -- otherwise return a lazy module + return type(package.loaded[module]) == "table" and package.loaded[module] + or setmetatable({}, { + __index = function(_, key) + mod = mod or require(module) + return mod[key] + end, + }) +end + return M diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index 1fa7cc1..c66611d 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -1,3 +1,4 @@ +local require = require("lazy.core.util").lazy_require local View = require("lazy.view") local Manage = require("lazy.manage") local Util = require("lazy.util") From 22bf6ae04bbfe0e11b3c539f8bd2ce66b72c328b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 9 Oct 2023 11:25:42 +0200 Subject: [PATCH 299/815] style: sort requires --- lua/lazy/core/handler/cmd.lua | 2 +- lua/lazy/core/handler/event.lua | 2 +- lua/lazy/core/handler/init.lua | 2 +- lua/lazy/core/handler/keys.lua | 2 +- lua/lazy/core/loader.lua | 4 ++-- lua/lazy/core/plugin.lua | 2 +- lua/lazy/health.lua | 2 +- lua/lazy/manage/checker.lua | 6 +++--- lua/lazy/manage/git.lua | 4 ++-- lua/lazy/manage/init.lua | 2 +- lua/lazy/manage/reloader.lua | 4 ++-- lua/lazy/manage/runner.lua | 2 +- lua/lazy/manage/task/fs.lua | 2 +- lua/lazy/manage/task/git.lua | 2 +- lua/lazy/manage/task/plugin.lua | 4 ++-- lua/lazy/state.lua | 2 +- lua/lazy/view/commands.lua | 4 ++-- lua/lazy/view/float.lua | 2 +- lua/lazy/view/init.lua | 8 ++++---- lua/lazy/view/render.lua | 6 +++--- stylua.toml | 5 ++++- tests/core/util_spec.lua | 2 +- 22 files changed, 37 insertions(+), 34 deletions(-) diff --git a/lua/lazy/core/handler/cmd.lua b/lua/lazy/core/handler/cmd.lua index 28c7d9b..6ff9623 100644 --- a/lua/lazy/core/handler/cmd.lua +++ b/lua/lazy/core/handler/cmd.lua @@ -1,5 +1,5 @@ -local Util = require("lazy.core.util") local Loader = require("lazy.core.loader") +local Util = require("lazy.core.util") ---@class LazyCmdHandler:LazyHandler local M = {} diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 2fdaa51..3a8d9a7 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -1,6 +1,6 @@ -local Util = require("lazy.core.util") local Config = require("lazy.core.config") local Loader = require("lazy.core.loader") +local Util = require("lazy.core.util") ---@class LazyEventOpts ---@field event string diff --git a/lua/lazy/core/handler/init.lua b/lua/lazy/core/handler/init.lua index dce3415..127ccae 100644 --- a/lua/lazy/core/handler/init.lua +++ b/lua/lazy/core/handler/init.lua @@ -1,5 +1,5 @@ -local Util = require("lazy.core.util") local Config = require("lazy.core.config") +local Util = require("lazy.core.util") ---@class LazyHandler ---@field type LazyHandlerTypes diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 30a4b4f..9a87128 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -1,5 +1,5 @@ -local Util = require("lazy.core.util") local Loader = require("lazy.core.loader") +local Util = require("lazy.core.util") ---@class LazyKeysBase ---@field desc? string diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 1912338..9e62371 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -1,8 +1,8 @@ -local Util = require("lazy.core.util") +local Cache = require("lazy.core.cache") local Config = require("lazy.core.config") local Handler = require("lazy.core.handler") local Plugin = require("lazy.core.plugin") -local Cache = require("lazy.core.cache") +local Util = require("lazy.core.util") ---@class LazyCoreLoader local M = {} diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 12ba1a8..3e5743a 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -1,6 +1,6 @@ local Config = require("lazy.core.config") -local Util = require("lazy.core.util") local Handler = require("lazy.core.handler") +local Util = require("lazy.core.util") ---@class LazyCorePlugin local M = {} diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 8757b77..929092d 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -54,7 +54,7 @@ function M.check() local spec = Config.spec if spec == nil then - error("No plugins loaded. Did you forget to run `require(\"lazy\").setup()`?") + error('No plugins loaded. Did you forget to run `require("lazy").setup()`?') else for _, plugin in pairs(spec.plugins) do M.check_valid(plugin) diff --git a/lua/lazy/manage/checker.lua b/lua/lazy/manage/checker.lua index 1cc5322..803972e 100644 --- a/lua/lazy/manage/checker.lua +++ b/lua/lazy/manage/checker.lua @@ -1,9 +1,9 @@ local Config = require("lazy.core.config") -local Manage = require("lazy.manage") -local Util = require("lazy.util") -local Plugin = require("lazy.core.plugin") local Git = require("lazy.manage.git") +local Manage = require("lazy.manage") +local Plugin = require("lazy.core.plugin") local State = require("lazy.state") +local Util = require("lazy.util") local M = {} diff --git a/lua/lazy/manage/git.lua b/lua/lazy/manage/git.lua index 116c5fe..98c44b5 100644 --- a/lua/lazy/manage/git.lua +++ b/lua/lazy/manage/git.lua @@ -1,7 +1,7 @@ -local Util = require("lazy.util") -local Semver = require("lazy.manage.semver") local Config = require("lazy.core.config") local Process = require("lazy.manage.process") +local Semver = require("lazy.manage.semver") +local Util = require("lazy.util") local M = {} diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 05ffa88..49953f0 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -1,6 +1,6 @@ local Config = require("lazy.core.config") -local Runner = require("lazy.manage.runner") local Plugin = require("lazy.core.plugin") +local Runner = require("lazy.manage.runner") local M = {} diff --git a/lua/lazy/manage/reloader.lua b/lua/lazy/manage/reloader.lua index 6938231..c48cc9f 100644 --- a/lua/lazy/manage/reloader.lua +++ b/lua/lazy/manage/reloader.lua @@ -1,7 +1,7 @@ local Config = require("lazy.core.config") -local Util = require("lazy.util") -local Plugin = require("lazy.core.plugin") local Loader = require("lazy.core.loader") +local Plugin = require("lazy.core.plugin") +local Util = require("lazy.util") local M = {} diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 7e556f2..85c20be 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -1,5 +1,5 @@ -local Task = require("lazy.manage.task") local Config = require("lazy.core.config") +local Task = require("lazy.manage.task") local Util = require("lazy.util") ---@class RunnerOpts diff --git a/lua/lazy/manage/task/fs.lua b/lua/lazy/manage/task/fs.lua index 9386f76..525997e 100644 --- a/lua/lazy/manage/task/fs.lua +++ b/lua/lazy/manage/task/fs.lua @@ -1,5 +1,5 @@ -local Util = require("lazy.util") local Config = require("lazy.core.config") +local Util = require("lazy.util") ---@type table local M = {} diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index bcecfec..74f7dfb 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -1,6 +1,6 @@ +local Config = require("lazy.core.config") local Git = require("lazy.manage.git") local Lock = require("lazy.manage.lock") -local Config = require("lazy.core.config") local Util = require("lazy.util") ---@type table diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index fd6153b..ea623ee 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -1,6 +1,6 @@ -local Util = require("lazy.util") -local Loader = require("lazy.core.loader") local Config = require("lazy.core.config") +local Loader = require("lazy.core.loader") +local Util = require("lazy.util") ---@type table local M = {} diff --git a/lua/lazy/state.lua b/lua/lazy/state.lua index 80e4c2e..cb4cd4d 100644 --- a/lua/lazy/state.lua +++ b/lua/lazy/state.lua @@ -1,5 +1,5 @@ -local Util = require("lazy.util") local Config = require("lazy.core.config") +local Util = require("lazy.util") ---@type LazyState local M = {} diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index c66611d..a826827 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -1,8 +1,8 @@ local require = require("lazy.core.util").lazy_require -local View = require("lazy.view") +local Config = require("lazy.core.config") local Manage = require("lazy.manage") local Util = require("lazy.util") -local Config = require("lazy.core.config") +local View = require("lazy.view") local ViewConfig = require("lazy.view.config") local M = {} diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index a879640..f69108e 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -1,6 +1,6 @@ local Config = require("lazy.core.config") -local ViewConfig = require("lazy.view.config") local Util = require("lazy.util") +local ViewConfig = require("lazy.view.config") ---@class LazyFloatOptions ---@field buf? number diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 869fac7..1be4b16 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -1,10 +1,10 @@ -local Util = require("lazy.util") -local Render = require("lazy.view.render") local Config = require("lazy.core.config") -local ViewConfig = require("lazy.view.config") -local Git = require("lazy.manage.git") local Diff = require("lazy.view.diff") local Float = require("lazy.view.float") +local Git = require("lazy.manage.git") +local Render = require("lazy.view.render") +local Util = require("lazy.util") +local ViewConfig = require("lazy.view.config") ---@class LazyViewState ---@field mode string diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 852a5d2..cc677b9 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -1,9 +1,9 @@ local Config = require("lazy.core.config") -local Util = require("lazy.util") -local Sections = require("lazy.view.sections") -local Handler = require("lazy.core.handler") local Git = require("lazy.manage.git") +local Handler = require("lazy.core.handler") local Plugin = require("lazy.core.plugin") +local Sections = require("lazy.view.sections") +local Util = require("lazy.util") local ViewConfig = require("lazy.view.config") local Text = require("lazy.view.text") diff --git a/stylua.toml b/stylua.toml index 5d6c50d..9732fe6 100644 --- a/stylua.toml +++ b/stylua.toml @@ -1,3 +1,6 @@ indent_type = "Spaces" indent_width = 2 -column_width = 120 \ No newline at end of file +column_width = 120 +[sort_requires] +enabled = true + diff --git a/tests/core/util_spec.lua b/tests/core/util_spec.lua index ee829a1..97c42c7 100644 --- a/tests/core/util_spec.lua +++ b/tests/core/util_spec.lua @@ -1,6 +1,6 @@ -local Util = require("lazy.util") local Cache = require("lazy.core.cache") local Helpers = require("tests.helpers") +local Util = require("lazy.util") describe("util", function() local rtp = vim.opt.rtp:get() From ce3e8523de7adfa73b104c816ce21ba54d70006b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Oct 2023 09:26:35 +0000 Subject: [PATCH 300/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 4a4a451..a13634a 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 08 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 09 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 423a152e94db37dd535d56e6cb6f06b282c5f081 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 9 Oct 2023 12:38:43 +0200 Subject: [PATCH 301/815] feat(profiling): added options to enable additional profiling --- README.md | 111 +++++++++++++++++++++------------------ lua/lazy/core/config.lua | 10 ++++ lua/lazy/core/util.lua | 2 +- lua/lazy/init.lua | 36 ++++++++++--- lua/lazy/view/colors.lua | 1 + lua/lazy/view/render.lua | 2 +- 6 files changed, 102 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index fb1a377..31963fc 100644 --- a/README.md +++ b/README.md @@ -355,6 +355,7 @@ return { not_loaded = "○", plugin = " ", runtime = " ", + require = "󰢱 ", source = " ", start = "", task = "✔ ", @@ -448,6 +449,15 @@ return { -- executed. In this case, a warning message will be shown. warn_on_override = true, }, + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, } ``` @@ -495,24 +505,24 @@ Any operation can be started from the UI, with a sub command or an API function: -| Command | Lua | Description | -| ------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -| `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | -| `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | -| `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | -| `:Lazy clear` | `require("lazy").clear()` | Clear finished tasks | -| `:Lazy debug` | `require("lazy").debug()` | Show debug information | -| `:Lazy health` | `require("lazy").health()` | Run `:checkhealth lazy` | -| `:Lazy help` | `require("lazy").help()` | Toggle this help page | -| `:Lazy home` | `require("lazy").home()` | Go back to plugin list | -| `:Lazy install [plugins]` | `require("lazy").install(opts?)` | Install missing plugins | -| `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | -| `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | -| `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | -| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | +| Command | Lua | Description | +| --- | --- | --- | --- | +| `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | +| `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | +| `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | +| `:Lazy clear` | `require("lazy").clear()` | Clear finished tasks | +| `:Lazy debug` | `require("lazy").debug()` | Show debug information | +| `:Lazy health` | `require("lazy").health()` | Run `:checkhealth lazy` | +| `:Lazy help` | `require("lazy").help()` | Toggle this help page | +| `:Lazy home` | `require("lazy").home()` | Go back to plugin list | +| `:Lazy install [plugins]` | `require("lazy").install(opts?)` | Install missing plugins | +| `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | +| `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | +| `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | +| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | | `:Lazy restore [plugins]` | `require("lazy").restore(opts?)` | Updates all plugins to the state in the lockfile. For a single plugin: restore it to the state in the lockfile or to a given commit under the cursor | -| `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | -| `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | +| `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | +| `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | @@ -763,39 +773,40 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori -| Highlight Group | Default Group | Description | -| --------------------- | -------------------------- | --------------------------------------------------- | -| **LazyButton** | **_CursorLine_** | | -| **LazyButtonActive** | **_Visual_** | | -| **LazyComment** | **_Comment_** | | -| **LazyCommit** | **_@variable.builtin_** | commit ref | -| **LazyCommitIssue** | **_Number_** | | -| **LazyCommitScope** | **_Italic_** | conventional commit scope | -| **LazyCommitType** | **_Title_** | conventional commit type | -| **LazyDimmed** | **_Conceal_** | property | -| **LazyDir** | **_@text.reference_** | directory | -| **LazyH1** | **_IncSearch_** | home button | -| **LazyH2** | **_Bold_** | titles | -| **LazyLocal** | **_Constant_** | | -| **LazyNoCond** | **_DiagnosticWarn_** | unloaded icon for a plugin where `cond()` was false | -| **LazyNormal** | **_NormalFloat_** | | -| **LazyProgressDone** | **_Constant_** | progress bar done | -| **LazyProgressTodo** | **_LineNr_** | progress bar todo | -| **LazyProp** | **_Conceal_** | property | -| **LazyReasonCmd** | **_Operator_** | | -| **LazyReasonEvent** | **_Constant_** | | -| **LazyReasonFt** | **_Character_** | | -| **LazyReasonImport** | **_Identifier_** | | -| **LazyReasonKeys** | **_Statement_** | | -| **LazyReasonPlugin** | **_Special_** | | -| **LazyReasonRuntime** | **_@macro_** | | -| **LazyReasonSource** | **_Character_** | | -| **LazyReasonStart** | **_@field_** | | -| **LazySpecial** | **_@punctuation.special_** | | -| **LazyTaskError** | **_ErrorMsg_** | task errors | -| **LazyTaskOutput** | **_MsgArea_** | task output | -| **LazyUrl** | **_@text.reference_** | url | -| **LazyValue** | **_@string_** | value of a property | +| Highlight Group | Default Group | Description | +| --- | --- | --- | +| **LazyButton** | ***CursorLine*** | | +| **LazyButtonActive** | ***Visual*** | | +| **LazyComment** | ***Comment*** | | +| **LazyCommit** | ***@variable.builtin*** | commit ref | +| **LazyCommitIssue** | ***Number*** | | +| **LazyCommitScope** | ***Italic*** | conventional commit scope | +| **LazyCommitType** | ***Title*** | conventional commit type | +| **LazyDimmed** | ***Conceal*** | property | +| **LazyDir** | ***@text.reference*** | directory | +| **LazyH1** | ***IncSearch*** | home button | +| **LazyH2** | ***Bold*** | titles | +| **LazyLocal** | ***Constant*** | | +| **LazyNoCond** | ***DiagnosticWarn*** | unloaded icon for a plugin where `cond()` was false | +| **LazyNormal** | ***NormalFloat*** | | +| **LazyProgressDone** | ***Constant*** | progress bar done | +| **LazyProgressTodo** | ***LineNr*** | progress bar todo | +| **LazyProp** | ***Conceal*** | property | +| **LazyReasonCmd** | ***Operator*** | | +| **LazyReasonEvent** | ***Constant*** | | +| **LazyReasonFt** | ***Character*** | | +| **LazyReasonImport** | ***Identifier*** | | +| **LazyReasonKeys** | ***Statement*** | | +| **LazyReasonPlugin** | ***Special*** | | +| **LazyReasonRequire** | ***@parameter*** | | +| **LazyReasonRuntime** | ***@macro*** | | +| **LazyReasonSource** | ***Character*** | | +| **LazyReasonStart** | ***@field*** | | +| **LazySpecial** | ***@punctuation.special*** | | +| **LazyTaskError** | ***ErrorMsg*** | task errors | +| **LazyTaskOutput** | ***MsgArea*** | task output | +| **LazyUrl** | ***@text.reference*** | url | +| **LazyValue** | ***@string*** | value of a property | diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index e676ab9..f4d948b 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -65,6 +65,7 @@ M.defaults = { not_loaded = "○", plugin = " ", runtime = " ", + require = "󰢱 ", source = " ", start = "", task = "✔ ", @@ -158,6 +159,15 @@ M.defaults = { -- executed. In this case, a warning message will be shown. warn_on_override = true, }, + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, debug = false, } diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index a11d3ae..da0fcf6 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -118,7 +118,7 @@ function M.get_source() if not info then break end - if info.what ~= "C" and not info.source:find("lazy.nvim", 1, true) then + if info.what ~= "C" and not info.source:find("lazy.nvim", 1, true) and info.source ~= "@vim/loader.lua" then return info.source:sub(2) end f = f + 1 diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index a2e0940..e219eaf 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -2,6 +2,23 @@ local M = {} M._start = 0 +local function profile_require() + local done = {} ---@type table + local r = require + _G.require = function(modname) + local Util = package.loaded["lazy.core.util"] + if Util and not done[modname] then + done[modname] = true + Util.track({ require = modname }) + local ret = vim.F.pack_len(r(modname)) + Util.track() + return vim.F.unpack_len(ret) + else + return r(modname) + end + end +end + ---@overload fun(opts: LazyConfig) ---@overload fun(spec:LazySpec, opts: LazyConfig) function M.setup(spec, opts) @@ -40,17 +57,16 @@ function M.setup(spec, opts) local Cache = require("lazy.core.cache") - local enable_cache = not ( - opts - and opts.performance - and opts.performance.cache - and opts.performance.cache.enabled == false - ) + local enable_cache = vim.tbl_get(opts, "performance", "cache", "enabled") ~= false -- load module cache before anything else if enable_cache then Cache.enable() end + if vim.tbl_get(opts, "profiling", "require") then + profile_require() + end + require("lazy.stats").track("LazyStart") local Util = require("lazy.core.util") @@ -59,8 +75,12 @@ function M.setup(spec, opts) table.insert(package.loaders, 3, Loader.loader) - if vim.g.profile_loaders then - Cache.profile_loaders() + if vim.tbl_get(opts, "profiling", "loader") then + if vim.loader then + vim.loader._profile({ loaders = true }) + else + Cache._profile_loaders() + end end Util.track({ plugin = "lazy.nvim" }) -- setup start diff --git a/lua/lazy/view/colors.lua b/lua/lazy/view/colors.lua index 6d43f1f..cc00a3a 100644 --- a/lua/lazy/view/colors.lua +++ b/lua/lazy/view/colors.lua @@ -26,6 +26,7 @@ M.colors = { ReasonFt = "Character", ReasonCmd = "Operator", ReasonImport = "Identifier", + ReasonRequire = "@parameter", Button = "CursorLine", ButtonActive = "Visual", TaskOutput = "MsgArea", -- task output diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index cc677b9..12c3da3 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -320,7 +320,7 @@ function M:reason(reason, opts) for _, key in ipairs(keys) do local value = reason[key] if type(key) == "number" then - elseif key == "require" then + -- elseif key == "require" then elseif key ~= "time" then if first then first = false From 336bbbebcb28e40283361562acca4daa2bd5f3d6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Oct 2023 10:39:27 +0000 Subject: [PATCH 302/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 153 ++++++++++++++++++++++++++++------------------ 1 file changed, 93 insertions(+), 60 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index a13634a..8ee9960 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -454,6 +454,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* not_loaded = "○", plugin = " ", runtime = " ", + require = "󰢱 ", source = " ", start = "", task = "✔ ", @@ -547,6 +548,15 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* -- executed. In this case, a warning message will be shown. warn_on_override = true, }, + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, } < @@ -589,45 +599,63 @@ enabled with `config.checker.enabled = true`. Any operation can be started from the UI, with a sub command or an API function: - -------------------------------------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- --------------------------------------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + --------------------------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ---------------------- ----------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and show the log (git fetch) + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are no longer needed + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed - :Lazy clear require("lazy").clear() Clear finished tasks + :Lazy clear require("lazy").clear() Clear finished tasks - :Lazy debug require("lazy").debug() Show debug information + :Lazy debug require("lazy").debug() Show debug information - :Lazy health require("lazy").health() Run :checkhealth lazy + :Lazy health require("lazy").health() Run :checkhealth lazy - :Lazy help require("lazy").help() Toggle this help page + :Lazy help require("lazy").help() Toggle this help page - :Lazy home require("lazy").home() Go back to plugin list + :Lazy home require("lazy").home() Go back to plugin list - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + :Lazy install [plugins] require("lazy").install(opts?) Install missing + plugins - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has not been loaded yet. Similar - to :packadd. Like :Lazy load foo.nvim. Use - :Lazy! load to skip cond checks. + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to + skip cond checks. - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - :Lazy profile require("lazy").profile() Show detailed profiling + :Lazy profile require("lazy").profile() Show detailed + profiling - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin (experimental!!) + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to the state in the lockfile. - For a single plugin: restore it to the state in the - lockfile or to a given commit under the cursor + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the + cursor - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and update + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This will also update the lockfile - -------------------------------------------------------------------------------------------------------------- + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + --------------------------------------------------------------------------------------------------- Any command can have a **bang** to make the command wait till it finished. For example, if you want to sync lazy from the cmdline, you can use: @@ -883,72 +911,77 @@ HIGHLIGHT GROUPS *lazy.nvim-lazy.nvim-highlight-groups* Click to see all highlight groups ~ - --------------------------------------------------------------------------------- - Highlight Group Default Group Description - ------------------- ------------------------ ------------------------------------ - LazyButton CursorLine + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine - LazyButtonActive Visual + LazyButtonActive Visual - LazyComment Comment + LazyComment Comment - LazyCommit _@variable.builtin_ commitref + LazyCommit @variable.builtin commit ref - LazyCommitIssue Number + LazyCommitIssue Number - LazyCommitScope Italic conventional commit scope + LazyCommitScope Italic conventional commit + scope - LazyCommitType Title conventional commit type + LazyCommitType Title conventional commit + type - LazyDimmed Conceal property + LazyDimmed Conceal property - LazyDir _@text.reference_ directory + LazyDir @text.reference directory - LazyH1 IncSearch homebutton + LazyH1 IncSearch home button - LazyH2 Bold titles + LazyH2 Bold titles - LazyLocal Constant + LazyLocal Constant - LazyNoCond DiagnosticWarn unloaded icon for a plugin where - cond() was false + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false - LazyNormal NormalFloat + LazyNormal NormalFloat - LazyProgressDone Constant progress bar done + LazyProgressDone Constant progress bar done - LazyProgressTodo LineNr progress bar todo + LazyProgressTodo LineNr progress bar todo - LazyProp Conceal property + LazyProp Conceal property - LazyReasonCmd Operator + LazyReasonCmd Operator - LazyReasonEvent Constant + LazyReasonEvent Constant - LazyReasonFt Character + LazyReasonFt Character - LazyReasonImport Identifier + LazyReasonImport Identifier - LazyReasonKeys Statement + LazyReasonKeys Statement - LazyReasonPlugin Special + LazyReasonPlugin Special - LazyReasonRuntime _@macro_ + LazyReasonRequire @parameter - LazyReasonSource Character + LazyReasonRuntime @macro - LazyReasonStart _@field_ + LazyReasonSource Character - LazySpecial _@punctuation.special_ + LazyReasonStart @field - LazyTaskError ErrorMsg taskerrors + LazySpecial @punctuation.special - LazyTaskOutput MsgArea task output + LazyTaskError ErrorMsg task errors - LazyUrl _@text.reference_ url + LazyTaskOutput MsgArea task output - LazyValue _@string_ valueof a property - --------------------------------------------------------------------------------- + LazyUrl @text.reference url + + LazyValue @string value of a property + ----------------------------------------------------------------------- PLUGIN AUTHORS *lazy.nvim-lazy.nvim-plugin-authors* From 41d3b2a9dbf03774a2c92c376d8371dcca9710a9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 12:43:14 +0200 Subject: [PATCH 303/815] chore(main): release 10.9.0 (#1092) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea2dadb..dcdecb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [10.9.0](https://github.com/folke/lazy.nvim/compare/v10.8.2...v10.9.0) (2023-10-09) + + +### Features + +* **profiling:** added options to enable additional profiling ([423a152](https://github.com/folke/lazy.nvim/commit/423a152e94db37dd535d56e6cb6f06b282c5f081)) + + +### Performance Improvements + +* lazy require commands ([f0cfbf9](https://github.com/folke/lazy.nvim/commit/f0cfbf995238a42064e119bd1daa694fd1683ea3)) + ## [10.8.2](https://github.com/folke/lazy.nvim/compare/v10.8.1...v10.8.2) (2023-10-08) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f4d948b..4cb4568 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -171,7 +171,7 @@ M.defaults = { debug = false, } -M.version = "10.8.2" -- x-release-please-version +M.version = "10.9.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 5579d72576b21b9c8c2d01838598aece5dc2be6d Mon Sep 17 00:00:00 2001 From: KANATSU Minoru Date: Mon, 9 Oct 2023 23:17:42 +0900 Subject: [PATCH 304/815] fix(manage): prevend auto conversion 'CRLF' to 'LF' in update lazy-lock.json on Windows. Fixes #1093 (#1094) --- lua/lazy/manage/lock.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/lock.lua b/lua/lazy/manage/lock.lua index 4545f74..c7ceb4e 100644 --- a/lua/lazy/manage/lock.lua +++ b/lua/lazy/manage/lock.lua @@ -9,7 +9,7 @@ M._loaded = false function M.update() vim.fn.mkdir(vim.fn.fnamemodify(Config.options.lockfile, ":p:h"), "p") - local f = assert(io.open(Config.options.lockfile, "w")) + local f = assert(io.open(Config.options.lockfile, "wb")) f:write("{\n") M.lock = {} From 2782f8125e793940f5bf942af1a1df0bbc989d11 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 9 Oct 2023 23:42:05 +0200 Subject: [PATCH 305/815] fix(profiling): ensure proper traces in case of require errors --- lua/lazy/init.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index e219eaf..75ccfa2 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -10,8 +10,13 @@ local function profile_require() if Util and not done[modname] then done[modname] = true Util.track({ require = modname }) - local ret = vim.F.pack_len(r(modname)) + local ok, ret = pcall(function() + return vim.F.pack_len(r(modname)) + end) Util.track() + if not ok then + error(ret, 2) + end return vim.F.unpack_len(ret) else return r(modname) From 0d9989d46cd2ae624858b94e529ee3e9d07773fd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 23:45:04 +0200 Subject: [PATCH 306/815] chore(main): release 10.9.1 (#1096) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dcdecb9..c7b1bd5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [10.9.1](https://github.com/folke/lazy.nvim/compare/v10.9.0...v10.9.1) (2023-10-09) + + +### Bug Fixes + +* **manage:** prevend auto conversion 'CRLF' to 'LF' in update lazy-lock.json on Windows. Fixes [#1093](https://github.com/folke/lazy.nvim/issues/1093) ([#1094](https://github.com/folke/lazy.nvim/issues/1094)) ([5579d72](https://github.com/folke/lazy.nvim/commit/5579d72576b21b9c8c2d01838598aece5dc2be6d)) +* **profiling:** ensure proper traces in case of require errors ([2782f81](https://github.com/folke/lazy.nvim/commit/2782f8125e793940f5bf942af1a1df0bbc989d11)) + ## [10.9.0](https://github.com/folke/lazy.nvim/compare/v10.8.2...v10.9.0) (2023-10-09) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4cb4568..57f5fef 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -171,7 +171,7 @@ M.defaults = { debug = false, } -M.version = "10.9.0" -- x-release-please-version +M.version = "10.9.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 89581ce37e1252133725cb583b5ba4fa0a827270 Mon Sep 17 00:00:00 2001 From: 0xAdk <29005635+0xAdk@users.noreply.github.com> Date: Tue, 10 Oct 2023 00:31:06 -0700 Subject: [PATCH 307/815] fix(docs): broken table in readme (#1097) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31963fc..e5ddc66 100644 --- a/README.md +++ b/README.md @@ -506,7 +506,7 @@ Any operation can be started from the UI, with a sub command or an API function: | Command | Lua | Description | -| --- | --- | --- | --- | +| --- | --- | --- | | `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | | `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | | `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | From 067544c74a6336fb5eb1c414b9d164ea27b616d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 10 Oct 2023 07:31:52 +0000 Subject: [PATCH 308/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 83 +++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 43 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 8ee9960..b378be0 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 09 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 10 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -599,63 +599,60 @@ enabled with `config.checker.enabled = true`. Any operation can be started from the UI, with a sub command or an API function: - --------------------------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ---------------------- ----------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed - :Lazy clear require("lazy").clear() Clear finished tasks + :Lazy clear require("lazy").clear() Clear finished tasks - :Lazy debug require("lazy").debug() Show debug information + :Lazy debug require("lazy").debug() Show debug information - :Lazy health require("lazy").health() Run :checkhealth lazy + :Lazy health require("lazy").health() Run :checkhealth lazy - :Lazy help require("lazy").help() Toggle this help page + :Lazy help require("lazy").help() Toggle this help page - :Lazy home require("lazy").home() Go back to plugin list + :Lazy home require("lazy").home() Go back to plugin list - :Lazy install [plugins] require("lazy").install(opts?) Install missing - plugins + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to - skip cond checks. + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - :Lazy profile require("lazy").profile() Show detailed - profiling + :Lazy profile require("lazy").profile() Show detailed profiling - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the - cursor + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - --------------------------------------------------------------------------------------------------- + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- Any command can have a **bang** to make the command wait till it finished. For example, if you want to sync lazy from the cmdline, you can use: From 43e9165994d76038bd6ebd2d06830a7204ae74e0 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 10 Oct 2023 11:41:32 +0200 Subject: [PATCH 309/815] feat(git): show error for local changes during check/update --- lua/lazy/manage/init.lua | 2 ++ lua/lazy/manage/task/git.lua | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 49953f0..897bdbf 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -103,6 +103,7 @@ function M.update(opts) "git.origin", "git.branch", "git.fetch", + "git.status", { "git.checkout", lockfile = opts.lockfile }, "plugin.docs", "wait", @@ -132,6 +133,7 @@ function M.check(opts) pipeline = { { "git.origin", check = true }, "git.fetch", + "git.status", "wait", { "git.log", check = true }, }, diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 74f7dfb..e18968b 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -156,6 +156,33 @@ M.origin = { end, } +M.status = { + skip = function(plugin) + return not plugin._.installed or plugin._.is_local + end, + run = function(self) + self:spawn("git", { + args = { "ls-files", "-d", "-m" }, + cwd = self.plugin.dir, + on_exit = function(ok, output) + if ok then + local lines = vim.split(output, "\n") + lines = vim.tbl_filter(function(line) + return line ~= "" + end, lines) + if #lines > 0 then + self.error = "You have local changes in `" .. self.plugin.dir .. "`:\n" + for _, line in ipairs(lines) do + self.error = self.error .. " * " .. line .. "\n" + end + self.error = self.error .. "Please remove them to update." + end + end + end, + }) + end, +} + -- fetches all needed origin branches M.fetch = { skip = function(plugin) From 736529d097979b3585cbc8e2728543fde9b314ed Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 10 Oct 2023 11:41:49 +0200 Subject: [PATCH 310/815] fix(git): automatically restore doc/tags when modified --- lua/lazy/manage/task/git.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index e18968b..1c70b38 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -168,6 +168,12 @@ M.status = { if ok then local lines = vim.split(output, "\n") lines = vim.tbl_filter(function(line) + -- Fix doc/tags being marked as modified + if line:gsub("[\\/]", "/") == "doc/tags" then + local Process = require("lazy.manage.process") + Process.exec({ "git", "checkout", "--", "doc/tags" }, { cwd = self.plugin.dir }) + return false + end return line ~= "" end, lines) if #lines > 0 then From 92869d0928ad3bb1aa61cf61897a78f3faa17835 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 10 Oct 2023 11:52:45 +0200 Subject: [PATCH 311/815] fix(process): make sure cwd is a valid directory --- lua/lazy/manage/process.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index 9b7fef4..00883e7 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -90,6 +90,11 @@ function M.spawn(cmd, opts) end) end + -- make sure the cwd is valid + if not opts.cwd and type(uv.cwd()) ~= "string" then + opts.cwd = uv.os_homedir() + end + handle = uv.spawn(cmd, { stdio = { nil, stdout, stderr }, args = opts.args, From 58e5726592a3f4a83735edfea996911d8daea002 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 10 Oct 2023 11:53:00 +0200 Subject: [PATCH 312/815] feat(git): show help on how to remove local changes --- lua/lazy/manage/task/git.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 1c70b38..9913ea1 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -181,7 +181,8 @@ M.status = { for _, line in ipairs(lines) do self.error = self.error .. " * " .. line .. "\n" end - self.error = self.error .. "Please remove them to update." + self.error = self.error .. "Please remove them to update.\n" + self.error = self.error .. "You can also press `x` to remove the plugin and then `I` to install it again." end end end, From 84d13c1d7e9a887a89525196dababdaad5021c93 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 16:15:05 +0200 Subject: [PATCH 313/815] chore(main): release 10.10.0 (#1098) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 15 +++++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7b1bd5..a1003ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [10.10.0](https://github.com/folke/lazy.nvim/compare/v10.9.1...v10.10.0) (2023-10-10) + + +### Features + +* **git:** show error for local changes during check/update ([43e9165](https://github.com/folke/lazy.nvim/commit/43e9165994d76038bd6ebd2d06830a7204ae74e0)) +* **git:** show help on how to remove local changes ([58e5726](https://github.com/folke/lazy.nvim/commit/58e5726592a3f4a83735edfea996911d8daea002)) + + +### Bug Fixes + +* **docs:** broken table in readme ([#1097](https://github.com/folke/lazy.nvim/issues/1097)) ([89581ce](https://github.com/folke/lazy.nvim/commit/89581ce37e1252133725cb583b5ba4fa0a827270)) +* **git:** automatically restore doc/tags when modified ([736529d](https://github.com/folke/lazy.nvim/commit/736529d097979b3585cbc8e2728543fde9b314ed)) +* **process:** make sure cwd is a valid directory ([92869d0](https://github.com/folke/lazy.nvim/commit/92869d0928ad3bb1aa61cf61897a78f3faa17835)) + ## [10.9.1](https://github.com/folke/lazy.nvim/compare/v10.9.0...v10.9.1) (2023-10-09) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 57f5fef..6ed4f94 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -171,7 +171,7 @@ M.defaults = { debug = false, } -M.version = "10.9.1" -- x-release-please-version +M.version = "10.10.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From a617db7e79bf826b46a8032f9170b42f62490013 Mon Sep 17 00:00:00 2001 From: Artyom Andreev Date: Tue, 10 Oct 2023 19:59:13 +0300 Subject: [PATCH 314/815] docs: icon for require without nerd font (#1100) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e5ddc66..1ac4cee 100644 --- a/README.md +++ b/README.md @@ -478,6 +478,7 @@ return { keys = "🗝", plugin = "🔌", runtime = "💻", + require = "🌙", source = "📄", start = "🚀", task = "📌", From 1a47d3b2aacfaba57231201a08fc23b753bab813 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 10 Oct 2023 16:59:52 +0000 Subject: [PATCH 315/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b378be0..48b123b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -574,6 +574,7 @@ If you don’t want to use a Nerd Font, you can replace the icons with Unicode s keys = "🗝", plugin = "🔌", runtime = "💻", + require = "🌙", source = "📄", start = "🚀", task = "📌", From cb3a0555b96cb90265860561991134e6ae16739c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 10 Oct 2023 19:12:07 +0200 Subject: [PATCH 316/815] docs: format table --- README.md | 102 +++++++++++++++++++++++++++--------------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 1ac4cee..e8d87c7 100644 --- a/README.md +++ b/README.md @@ -506,24 +506,24 @@ Any operation can be started from the UI, with a sub command or an API function: -| Command | Lua | Description | -| --- | --- | --- | -| `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | -| `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | -| `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | -| `:Lazy clear` | `require("lazy").clear()` | Clear finished tasks | -| `:Lazy debug` | `require("lazy").debug()` | Show debug information | -| `:Lazy health` | `require("lazy").health()` | Run `:checkhealth lazy` | -| `:Lazy help` | `require("lazy").help()` | Toggle this help page | -| `:Lazy home` | `require("lazy").home()` | Go back to plugin list | -| `:Lazy install [plugins]` | `require("lazy").install(opts?)` | Install missing plugins | -| `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | -| `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | -| `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | -| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | +| Command | Lua | Description | +| ------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | +| `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | +| `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | +| `:Lazy clear` | `require("lazy").clear()` | Clear finished tasks | +| `:Lazy debug` | `require("lazy").debug()` | Show debug information | +| `:Lazy health` | `require("lazy").health()` | Run `:checkhealth lazy` | +| `:Lazy help` | `require("lazy").help()` | Toggle this help page | +| `:Lazy home` | `require("lazy").home()` | Go back to plugin list | +| `:Lazy install [plugins]` | `require("lazy").install(opts?)` | Install missing plugins | +| `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | +| `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | +| `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | +| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | | `:Lazy restore [plugins]` | `require("lazy").restore(opts?)` | Updates all plugins to the state in the lockfile. For a single plugin: restore it to the state in the lockfile or to a given commit under the cursor | -| `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | -| `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | +| `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | +| `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | @@ -774,40 +774,40 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori -| Highlight Group | Default Group | Description | -| --- | --- | --- | -| **LazyButton** | ***CursorLine*** | | -| **LazyButtonActive** | ***Visual*** | | -| **LazyComment** | ***Comment*** | | -| **LazyCommit** | ***@variable.builtin*** | commit ref | -| **LazyCommitIssue** | ***Number*** | | -| **LazyCommitScope** | ***Italic*** | conventional commit scope | -| **LazyCommitType** | ***Title*** | conventional commit type | -| **LazyDimmed** | ***Conceal*** | property | -| **LazyDir** | ***@text.reference*** | directory | -| **LazyH1** | ***IncSearch*** | home button | -| **LazyH2** | ***Bold*** | titles | -| **LazyLocal** | ***Constant*** | | -| **LazyNoCond** | ***DiagnosticWarn*** | unloaded icon for a plugin where `cond()` was false | -| **LazyNormal** | ***NormalFloat*** | | -| **LazyProgressDone** | ***Constant*** | progress bar done | -| **LazyProgressTodo** | ***LineNr*** | progress bar todo | -| **LazyProp** | ***Conceal*** | property | -| **LazyReasonCmd** | ***Operator*** | | -| **LazyReasonEvent** | ***Constant*** | | -| **LazyReasonFt** | ***Character*** | | -| **LazyReasonImport** | ***Identifier*** | | -| **LazyReasonKeys** | ***Statement*** | | -| **LazyReasonPlugin** | ***Special*** | | -| **LazyReasonRequire** | ***@parameter*** | | -| **LazyReasonRuntime** | ***@macro*** | | -| **LazyReasonSource** | ***Character*** | | -| **LazyReasonStart** | ***@field*** | | -| **LazySpecial** | ***@punctuation.special*** | | -| **LazyTaskError** | ***ErrorMsg*** | task errors | -| **LazyTaskOutput** | ***MsgArea*** | task output | -| **LazyUrl** | ***@text.reference*** | url | -| **LazyValue** | ***@string*** | value of a property | +| Highlight Group | Default Group | Description | +| --------------------- | -------------------------- | --------------------------------------------------- | +| **LazyButton** | **_CursorLine_** | | +| **LazyButtonActive** | **_Visual_** | | +| **LazyComment** | **_Comment_** | | +| **LazyCommit** | **_@variable.builtin_** | commit ref | +| **LazyCommitIssue** | **_Number_** | | +| **LazyCommitScope** | **_Italic_** | conventional commit scope | +| **LazyCommitType** | **_Title_** | conventional commit type | +| **LazyDimmed** | **_Conceal_** | property | +| **LazyDir** | **_@text.reference_** | directory | +| **LazyH1** | **_IncSearch_** | home button | +| **LazyH2** | **_Bold_** | titles | +| **LazyLocal** | **_Constant_** | | +| **LazyNoCond** | **_DiagnosticWarn_** | unloaded icon for a plugin where `cond()` was false | +| **LazyNormal** | **_NormalFloat_** | | +| **LazyProgressDone** | **_Constant_** | progress bar done | +| **LazyProgressTodo** | **_LineNr_** | progress bar todo | +| **LazyProp** | **_Conceal_** | property | +| **LazyReasonCmd** | **_Operator_** | | +| **LazyReasonEvent** | **_Constant_** | | +| **LazyReasonFt** | **_Character_** | | +| **LazyReasonImport** | **_Identifier_** | | +| **LazyReasonKeys** | **_Statement_** | | +| **LazyReasonPlugin** | **_Special_** | | +| **LazyReasonRequire** | **_@parameter_** | | +| **LazyReasonRuntime** | **_@macro_** | | +| **LazyReasonSource** | **_Character_** | | +| **LazyReasonStart** | **_@field_** | | +| **LazySpecial** | **_@punctuation.special_** | | +| **LazyTaskError** | **_ErrorMsg_** | task errors | +| **LazyTaskOutput** | **_MsgArea_** | task output | +| **LazyUrl** | **_@text.reference_** | url | +| **LazyValue** | **_@string_** | value of a property | From 7b84609a06bd11869370bc20a9255bb469e35a50 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 10 Oct 2023 19:12:35 +0200 Subject: [PATCH 317/815] feat(util): expose pretty stacktraces for notify --- lua/lazy/core/util.lua | 63 +++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index da0fcf6..dd9b2a9 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -64,38 +64,41 @@ function M.norm(path) return path:sub(-1) == "/" and path:sub(1, -2) or path end +---@param opts? {level?: number} +function M.pretty_trace(opts) + opts = opts or {} + local Config = require("lazy.core.config") + local trace = {} + local level = opts.level or 2 + while true do + local info = debug.getinfo(level, "Sln") + if not info then + break + end + if info.what ~= "C" and not info.source:find("lazy.nvim") then + local source = info.source:sub(2) + if source:find(Config.options.root, 1, true) == 1 then + source = source:sub(#Config.options.root + 1) + end + source = vim.fn.fnamemodify(source, ":p:~:.") --[[@as string]] + local line = " - " .. source .. ":" .. info.currentline + if info.name then + line = line .. " _in_ **" .. info.name .. "**" + end + table.insert(trace, line) + end + level = level + 1 + end + return #trace > 0 and ("\n\n# stacktrace:\n" .. table.concat(trace, "\n")) or "" +end + ---@param opts? string|{msg:string, on_error:fun(msg)} function M.try(fn, opts) opts = type(opts) == "string" and { msg = opts } or opts or {} local msg = opts.msg -- error handler local error_handler = function(err) - local Config = require("lazy.core.config") - local trace = {} - local level = 1 - while true do - local info = debug.getinfo(level, "Sln") - if not info then - break - end - if info.what ~= "C" and not info.source:find("lazy.nvim") then - local source = info.source:sub(2) - if source:find(Config.options.root, 1, true) == 1 then - source = source:sub(#Config.options.root + 1) - end - source = vim.fn.fnamemodify(source, ":p:~:.") - local line = " - " .. source .. ":" .. info.currentline - if info.name then - line = line .. " _in_ **" .. info.name .. "**" - end - table.insert(trace, line) - end - level = level + 1 - end - msg = (msg and (msg .. "\n\n") or "") .. err - if #trace > 0 then - msg = msg .. "\n\n# stacktrace:\n" .. table.concat(trace, "\n") - end + msg = (msg and (msg .. "\n\n") or "") .. err .. M.pretty_trace() if opts.on_error then opts.on_error(msg) else @@ -292,7 +295,7 @@ function M.extend(list, add) return list end ----@alias LazyNotifyOpts {lang?:string, title?:string, level?:number} +---@alias LazyNotifyOpts {lang?:string, title?:string, level?:number, once?:boolean, stacktrace?:boolean, stacklevel?:number} ---@param msg string|string[] ---@param opts? LazyNotifyOpts @@ -312,8 +315,12 @@ function M.notify(msg, opts) "\n" ) end + if opts.stacktrace then + msg = msg .. M.pretty_trace({ level = opts.stacklevel or 2 }) + end local lang = opts.lang or "markdown" - vim.notify(msg, opts.level or vim.log.levels.INFO, { + local n = opts.once and vim.notify_once or vim.notify + n(msg, opts.level or vim.log.levels.INFO, { on_open = function(win) local ok = pcall(function() vim.treesitter.language.add("markdown") From 2947f104e140e21cc87c55f86c1599fbe26caf0f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 10 Oct 2023 17:13:22 +0000 Subject: [PATCH 318/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 120 ++++++++++++++++++++-------------------------- 1 file changed, 51 insertions(+), 69 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 48b123b..bf45902 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -600,17 +600,14 @@ enabled with `config.checker.enabled = true`. Any operation can be started from the UI, with a sub command or an API function: - ---------------------------------------------------------------------------------- + -------------------------------------------------------------------------------------------------------------- Command Lua Description - ------------------------- -------------------------------- ----------------------- + ------------------------- -------------------------------- --------------------------------------------------- :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and show the log (git fetch) - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are no longer needed :Lazy clear require("lazy").clear() Clear finished tasks @@ -624,36 +621,24 @@ function: :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has not been loaded yet. Similar + to :packadd. Like :Lazy load foo.nvim. Use + :Lazy! load to skip cond checks. :Lazy log [plugins] require("lazy").log(opts?) Show recent updates :Lazy profile require("lazy").profile() Show detailed profiling - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin (experimental!!) - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to the state in the lockfile. + For a single plugin: restore it to the state in the + lockfile or to a given commit under the cursor - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and update - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This will also update the lockfile + -------------------------------------------------------------------------------------------------------------- Any command can have a **bang** to make the command wait till it finished. For example, if you want to sync lazy from the cmdline, you can use: @@ -909,77 +894,74 @@ HIGHLIGHT GROUPS *lazy.nvim-lazy.nvim-highlight-groups* Click to see all highlight groups ~ - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine + --------------------------------------------------------------------------------- + Highlight Group Default Group Description + ------------------- ------------------------ ------------------------------------ + LazyButton CursorLine - LazyButtonActive Visual + LazyButtonActive Visual - LazyComment Comment + LazyComment Comment - LazyCommit @variable.builtin commit ref + LazyCommit _@variable.builtin_ commitref - LazyCommitIssue Number + LazyCommitIssue Number - LazyCommitScope Italic conventional commit - scope + LazyCommitScope Italic conventional commit scope - LazyCommitType Title conventional commit - type + LazyCommitType Title conventional commit type - LazyDimmed Conceal property + LazyDimmed Conceal property - LazyDir @text.reference directory + LazyDir _@text.reference_ directory - LazyH1 IncSearch home button + LazyH1 IncSearch homebutton - LazyH2 Bold titles + LazyH2 Bold titles - LazyLocal Constant + LazyLocal Constant - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false + LazyNoCond DiagnosticWarn unloaded icon for a plugin where + cond() was false - LazyNormal NormalFloat + LazyNormal NormalFloat - LazyProgressDone Constant progress bar done + LazyProgressDone Constant progress bar done - LazyProgressTodo LineNr progress bar todo + LazyProgressTodo LineNr progress bar todo - LazyProp Conceal property + LazyProp Conceal property - LazyReasonCmd Operator + LazyReasonCmd Operator - LazyReasonEvent Constant + LazyReasonEvent Constant - LazyReasonFt Character + LazyReasonFt Character - LazyReasonImport Identifier + LazyReasonImport Identifier - LazyReasonKeys Statement + LazyReasonKeys Statement - LazyReasonPlugin Special + LazyReasonPlugin Special - LazyReasonRequire @parameter + LazyReasonRequire _@parameter_ - LazyReasonRuntime @macro + LazyReasonRuntime _@macro_ - LazyReasonSource Character + LazyReasonSource Character - LazyReasonStart @field + LazyReasonStart _@field_ - LazySpecial @punctuation.special + LazySpecial _@punctuation.special_ - LazyTaskError ErrorMsg task errors + LazyTaskError ErrorMsg taskerrors - LazyTaskOutput MsgArea task output + LazyTaskOutput MsgArea task output - LazyUrl @text.reference url + LazyUrl _@text.reference_ url - LazyValue @string value of a property - ----------------------------------------------------------------------- + LazyValue _@string_ valueof a property + --------------------------------------------------------------------------------- PLUGIN AUTHORS *lazy.nvim-lazy.nvim-plugin-authors* From 73fbf5ccabd0233653bdeb4bb2b07fcfa97b57e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 19:52:13 +0200 Subject: [PATCH 319/815] chore(main): release 10.11.0 (#1101) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1003ef..e427d30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.11.0](https://github.com/folke/lazy.nvim/compare/v10.10.0...v10.11.0) (2023-10-10) + + +### Features + +* **util:** expose pretty stacktraces for notify ([7b84609](https://github.com/folke/lazy.nvim/commit/7b84609a06bd11869370bc20a9255bb469e35a50)) + ## [10.10.0](https://github.com/folke/lazy.nvim/compare/v10.9.1...v10.10.0) (2023-10-10) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 6ed4f94..9333785 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -171,7 +171,7 @@ M.defaults = { debug = false, } -M.version = "10.10.0" -- x-release-please-version +M.version = "10.11.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 303a3ed6a874bb5bdebf11ecdf99e1dfa3eed2c3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 11 Oct 2023 14:24:18 +0200 Subject: [PATCH 320/815] feat(event): added support for structured events (see readme on event) --- README.md | 58 +++++++++++------------ lua/lazy/core/handler/event.lua | 83 +++++++++++++++++++++------------ lua/lazy/types.lua | 2 +- 3 files changed, 82 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index e8d87c7..f17dd46 100644 --- a/README.md +++ b/README.md @@ -79,35 +79,35 @@ 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 | -| **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` | -| **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 included in the spec | -| **cond** | `boolean?` or `fun(LazyPlugin):boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | -| **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | -| **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | -| **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | -| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)`. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | -| **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | -| **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. 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. Some plugins provide their own `build.lua` which is automatically used by lazy. So no need to specify a build step for those plugins. | -| **branch** | `string?` | Branch of the repository | -| **tag** | `string?` | Tag of the repository | -| **commit** | `string?` | Commit of the repository | -| **version** | `string?` or `false` to override the default | 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 | -| **submodules** | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | -| **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | -| **cmd** | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]` | Lazy-load on command | -| **ft** | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]` | Lazy-load on filetype | -| **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | -| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | -| **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | -| **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins | +| 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 | +| **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` | +| **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 included in the spec | +| **cond** | `boolean?` or `fun(LazyPlugin):boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | +| **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | +| **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | +| **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | +| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)`. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | +| **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | +| **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. 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. Some plugins provide their own `build.lua` which is automatically used by lazy. So no need to specify a build step for those plugins. | +| **branch** | `string?` | Branch of the repository | +| **tag** | `string?` | Tag of the repository | +| **commit** | `string?` | Commit of the repository | +| **version** | `string?` or `false` to override the default | 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 | +| **submodules** | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | +| **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` or `{event:string[]\|string, pattern?:string[]\|string}` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | +| **cmd** | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]` | Lazy-load on command | +| **ft** | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]` | Lazy-load on filetype | +| **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | +| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | +| **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | +| **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins | ### Lazy Loading diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 3a8d9a7..69f9086 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -4,12 +4,14 @@ local Util = require("lazy.core.util") ---@class LazyEventOpts ---@field event string ----@field pattern? string ---@field group? string ---@field exclude? string[] ---@field data? any ---@field buffer? number +---@alias LazyEvent {id:string, event:string[]|string, pattern?:string[]|string} +---@alias LazyEventSpec string|{event?:string|string[], pattern?:string|string[]}|string[] + ---@class LazyEventHandler:LazyHandler ---@field events table ---@field group number @@ -23,28 +25,64 @@ M.triggers = { M.group = vim.api.nvim_create_augroup("lazy_handler_event", { clear = true }) ----@param value string -function M:_add(value) - local event_spec = self:_event(value) - ---@type string?, string? - local event, pattern = event_spec:match("^(%w+)%s+(.*)$") - event = event or event_spec +---@param spec LazyEventSpec +---@return LazyEvent +function M:parse(spec) + local ret = M.mappings[spec] --[[@as LazyEvent?]] + if ret then + return ret + end + if type(spec) == "string" then + local event, pattern = spec:match("^(%w+)%s+(.*)$") + event = event or spec + return { id = spec, event = event, pattern = pattern } + elseif Util.is_list(spec) then + ret = { id = table.concat(spec, "|"), event = spec } + else + ret = spec --[[@as LazyEvent]] + if not ret.id then + ---@diagnostic disable-next-line: assign-type-mismatch, param-type-mismatch + ret.id = type(ret.event) == "string" and ret.event or table.concat(ret.event, "|") + if ret.pattern then + ---@diagnostic disable-next-line: assign-type-mismatch, param-type-mismatch + ret.id = ret.id .. " " .. (type(ret.pattern) == "string" and ret.pattern or table.concat(ret.pattern, ", ")) + end + end + end + return ret +end + +---@param plugin LazyPlugin +function M:values(plugin) + ---@type table + local values = {} + ---@diagnostic disable-next-line: no-unknown + for _, value in ipairs(plugin[self.type] or {}) do + local event = self:parse(value) + values[event.id] = event + end + return values +end + +---@param event LazyEvent +function M:_add(event) local done = false - vim.api.nvim_create_autocmd(event, { + vim.api.nvim_create_autocmd(event.event, { group = self.group, once = true, - pattern = pattern, + pattern = event.pattern, callback = function(ev) - if done or not self.active[value] then + if done or not self.active[event.id] then return end + -- HACK: work-around for https://github.com/neovim/neovim/issues/25526 done = true - Util.track({ [self.type] = value }) + Util.track({ [self.type] = event.id }) - local state = M.get_state(ev.event, pattern, ev.buf, ev.data) + local state = M.get_state(ev.event, ev.buf, ev.data) -- load the plugins - Loader.load(self.active[value], { [self.type] = value }) + Loader.load(self.active[event.id], { [self.type] = event.id }) -- check if any plugin created an event handler for this event and fire the group for _, s in ipairs(state) do @@ -57,38 +95,23 @@ end -- Get the current state of the event and all the events that will be fired ---@param event string ----@param pattern? string ---@param buf number ---@param data any -function M.get_state(event, pattern, buf, data) +function M.get_state(event, buf, data) local state = {} ---@type LazyEventOpts[] while event do table.insert(state, 1, { event = event, - pattern = pattern, exclude = event ~= "FileType" and M.get_augroups(event) or nil, buffer = buf, data = data, }) data = nil -- only pass the data to the first event - if event == "FileType" then - pattern = nil -- only use the pattern for the first event - end event = M.triggers[event] end return state end ----@param value string -function M:_event(value) - if value == "VeryLazy" then - return "User VeryLazy" - elseif value == "BufRead" then - return "BufReadPost" - end - return value -end - -- Get all augroups for the events ---@param event string function M.get_augroups(event) @@ -127,7 +150,6 @@ function M._trigger(opts) Util.info({ "# Firing Events", " - **event:** " .. opts.event, - opts.pattern and (" - **pattern:** " .. opts.pattern), opts.group and (" - **group:** " .. opts.group), opts.buffer and (" - **buffer:** " .. opts.buffer), }) @@ -135,7 +157,6 @@ function M._trigger(opts) Util.track({ event = opts.group or opts.event }) Util.try(function() vim.api.nvim_exec_autocmds(opts.event, { - -- pattern = opts.pattern, buffer = opts.buffer, group = opts.group, modeline = false, diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 3e7f74d..e83b9c4 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -29,7 +29,7 @@ ---@field opts? PluginOpts ---@class LazyPluginHandlers ----@field event? string[] +---@field event? LazyEventSpec[] ---@field cmd? string[] ---@field ft? string[] ---@field keys? (string|LazyKeysSpec)[] From b65d3086623448b93bf02055f73819b76ca1dd78 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 11 Oct 2023 14:24:40 +0200 Subject: [PATCH 321/815] feat(event): custom lazy event hook for distros --- lua/lazy/core/handler/event.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 69f9086..dd1a38f 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -23,6 +23,16 @@ M.triggers = { BufReadPost = "BufReadPre", } +-- A table of mappings for custom events +-- Can be used by distros to add custom events (see usage in LazyVim) +---@type table +M.mappings = { + VeryLazy = { id = "VeryLazy", event = "User", pattern = "VeryLazy" }, + -- Example: + -- LazyFile = { id = "LazyFile", event = { "BufReadPost", "BufNewFile", "BufWritePre" } }, +} +M.mappings["User VeryLazy"] = M.mappings.VeryLazy + M.group = vim.api.nvim_create_augroup("lazy_handler_event", { clear = true }) ---@param spec LazyEventSpec From 99ee28473962d9ab8aa11db2d2cc201e38f0f432 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 11 Oct 2023 14:25:10 +0200 Subject: [PATCH 322/815] fix(ui): use actual handler values for rendering plugin handlers --- lua/lazy/core/handler/ft.lua | 13 ++++++++----- lua/lazy/view/render.lua | 25 ++++++++++++++----------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/lua/lazy/core/handler/ft.lua b/lua/lazy/core/handler/ft.lua index f0947c6..7af2b9a 100644 --- a/lua/lazy/core/handler/ft.lua +++ b/lua/lazy/core/handler/ft.lua @@ -5,11 +5,6 @@ local Loader = require("lazy.core.loader") local M = {} M.extends = Event ----@param value string -function M:_event(value) - return "FileType " .. value -end - ---@param plugin LazyPlugin function M:add(plugin) self.super.add(self, plugin) @@ -18,4 +13,12 @@ function M:add(plugin) end end +function M:parse(value) + return { + id = value, + event = "FileType", + pattern = value, + } +end + return M diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 12c3da3..d4cfdfb 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -319,17 +319,13 @@ function M:reason(reason, opts) end for _, key in ipairs(keys) do local value = reason[key] - if type(key) == "number" then - -- elseif key == "require" then - elseif key ~= "time" then + local skip = type(key) == "number" or key == "time" + if not skip then if first then first = false else self:append(" ") end - if key == "event" then - value = value:match("User (.*)") or value - end if key == "keys" then value = type(value) == "string" and value or value.lhs or value[1] end @@ -414,11 +410,18 @@ function M:plugin(plugin) if plugin._.kind ~= "disabled" then for handler in pairs(Handler.types) do if plugin[handler] then - local trigger = {} - for _, value in ipairs(plugin[handler]) do - table.insert(trigger, type(value) == "table" and value[1] or value) - end - reason[handler] = table.concat(trigger, " ") + local values = Handler.handlers[handler]:values(plugin) + values = vim.tbl_map(function(value) + if handler == "ft" or handler == "event" then + ---@cast value LazyEvent + return value.id + elseif handler == "keys" then + ---@cast value LazyKeys + return value.lhs .. (value.mode == "n" and "" or " (" .. value.mode .. ")") + end + return value + end, vim.tbl_values(values)) + reason[handler] = table.concat(values, " ") end end end From 9ca9a63be5672aafbb30cf6984c065da3927b1ee Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 11 Oct 2023 12:26:07 +0000 Subject: [PATCH 323/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 77 ++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index bf45902..62a6025 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 10 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 11 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -103,9 +103,9 @@ It is recommended to run `:checkhealth lazy` after installation. PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* - ---------------------------------------------------------------------------------------------------------------------------------- + -------------------------------------------------------------------------------------------------------------------------------- Property Type Description - -------------- ------------------------------------------------------------ ------------------------------------------------------ + -------------- ------------------------------------------------------------ ---------------------------------------------------- [1] string? Short plugin url. Will be expanded using config.git.url_format @@ -113,40 +113,40 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* 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 - 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 included in the spec cond boolean? or fun(LazyPlugin):boolean When false, or if the function returns false, then - this plugin will not be loaded. Useful to disable some - plugins in vscode, or firenvim for example. + this plugin will not be loaded. Useful to disable + some plugins in vscode, or firenvim for example. - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When - specifying a name, make sure the plugin spec has been - defined somewhere else. + dependencies LazySpec[] A list of plugin names or plugin specs that should + be loaded when the plugin loads. Dependencies are + always lazy-loaded unless specified otherwise. When + specifying a name, make sure the plugin spec has + been defined somewhere else. init fun(LazyPlugin) init functions are always executed during startup opts table or fun(LazyPlugin, opts:table) opts should be a table (will be merged with parent specs), return a table (replaces parent specs) or - should change a table. The table will be passed to the - Plugin.config() function. Setting this value will - imply Plugin.config() + should change a table. The table will be passed to + the Plugin.config() function. Setting this value + will imply Plugin.config() - config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The default - implementation will automatically run + config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The + default implementation will automatically run require(MAIN).setup(opts). Lazy uses several heuristics to determine the plugin’s MAIN module automatically based on the plugin’s name. See also @@ -160,11 +160,12 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* build fun(LazyPlugin) or string or a list of build commands build is executed when a plugin is installed or updated. Before running build, a plugin is first loaded. 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. Some plugins provide their own build.lua - which is automatically used by lazy. So no need to - specify a build step for those plugins. + command. When prefixed with : it is a Neovim + command. You can also specify a list to executed + multiple build commands. Some plugins provide their + own build.lua which is automatically used by lazy. + So no need to specify a build step for those + plugins. branch string? Branch of the repository @@ -172,16 +173,18 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* commit string? Commit of the repository - version string? or false to override the default Version to use from the repository. Full Semver ranges - are supported + version string? or false to override the default Version to use from the repository. Full 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 submodules boolean? When false, git submodules will not be fetched. Defaults to true event string? or string[] or Lazy-load on event. Events can be specified as - fun(self:LazyPlugin, event:string[]):string[] BufEnter or with a pattern like BufEnter *.lua + fun(self:LazyPlugin, event:string[]):string[] or BufEnter or with a pattern like BufEnter *.lua + {event:string[]\|string, pattern?:string[]\|string} cmd string? or string[] or Lazy-load on command fun(self:LazyPlugin, cmd:string[]):string[] @@ -196,17 +199,17 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* required somewhere priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. + loading certain plugins first. Default priority is + 50. It’s recommended to set this to a high number + for colorschemes. optional boolean? When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without - optional. This is mainly useful for Neovim distros, to - allow setting options on plugins that may/may not be - part of the user’s plugins - ---------------------------------------------------------------------------------------------------------------------------------- + optional. This is mainly useful for Neovim distros, + to allow setting options on plugins that may/may not + be part of the user’s plugins + -------------------------------------------------------------------------------------------------------------------------------- LAZY LOADING ~ From 906ff8e569872d9081cfc9246d917011c22b5e61 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 15:00:30 +0200 Subject: [PATCH 324/815] chore(main): release 10.12.0 (#1102) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e427d30..11b36a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [10.12.0](https://github.com/folke/lazy.nvim/compare/v10.11.0...v10.12.0) (2023-10-11) + + +### Features + +* **event:** added support for structured events (see readme on event) ([303a3ed](https://github.com/folke/lazy.nvim/commit/303a3ed6a874bb5bdebf11ecdf99e1dfa3eed2c3)) +* **event:** custom lazy event hook for distros ([b65d308](https://github.com/folke/lazy.nvim/commit/b65d3086623448b93bf02055f73819b76ca1dd78)) + + +### Bug Fixes + +* **ui:** use actual handler values for rendering plugin handlers ([99ee284](https://github.com/folke/lazy.nvim/commit/99ee28473962d9ab8aa11db2d2cc201e38f0f432)) + ## [10.11.0](https://github.com/folke/lazy.nvim/compare/v10.10.0...v10.11.0) (2023-10-10) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9333785..e74eee6 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -171,7 +171,7 @@ M.defaults = { debug = false, } -M.version = "10.11.0" -- x-release-please-version +M.version = "10.12.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 43c284a57870e1a7ed42782eacf444a6a752f81e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maria=20Jos=C3=A9=20Solano?= Date: Wed, 11 Oct 2023 22:18:53 -0700 Subject: [PATCH 325/815] feat(keys): include custom keys in help menu (#1105) --- README.md | 33 +++++++++++++++++++-------------- doc/lazy.nvim.txt | 37 +++++++++++++++++++++---------------- lua/lazy/core/config.lua | 33 +++++++++++++++++++-------------- lua/lazy/view/init.lua | 7 ++++--- lua/lazy/view/render.lua | 8 ++++++++ 5 files changed, 71 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index f17dd46..13b25e1 100644 --- a/README.md +++ b/README.md @@ -371,22 +371,27 @@ return { browser = nil, ---@type string? throttle = 20, -- how frequently should the ui process render events custom_keys = { - -- you can define custom key maps here. - -- To disable one of the defaults, set it to false + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. - -- open lazygit log - ["l"] = function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, - -- open a terminal for the plugin dir - ["t"] = function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, }, }, diff = { diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 62a6025..a0cd52f 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -473,22 +473,27 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* browser = nil, ---@type string? throttle = 20, -- how frequently should the ui process render events custom_keys = { - -- you can define custom key maps here. - -- To disable one of the defaults, set it to false - - -- open lazygit log - ["l"] = function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - - -- open a terminal for the plugin dir - ["t"] = function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, }, }, diff = { diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index e74eee6..81b4477 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -81,22 +81,27 @@ M.defaults = { browser = nil, ---@type string? throttle = 20, -- how frequently should the ui process render events custom_keys = { - -- you can define custom key maps here. - -- To disable one of the defaults, set it to false + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. - -- open lazygit log - ["l"] = function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, - -- open a terminal for the plugin dir - ["t"] = function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, }, }, diff = { diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 1be4b16..e62fc6e 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -121,9 +121,10 @@ function M.create() end end) - for key, handler in pairs(Config.options.ui.custom_keys) do - if handler then - self:on_key(key, function() + for lhs, rhs in pairs(Config.options.ui.custom_keys) do + if rhs then + local handler = type(rhs) == "table" and rhs[1] or rhs + self:on_key(lhs, function() local plugin = self.render:get_plugin() if plugin then handler(plugin) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index d4cfdfb..fca229b 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -209,6 +209,14 @@ function M:help() self:append(" " .. (mode.desc_plugin or mode.desc)):nl() end end + for lhs, rhs in pairs(Config.options.ui.custom_keys) do + if type(rhs) == "table" and rhs.desc then + self:append("- ", "LazySpecial", { indent = 2 }) + self:append("Custom key ", "Title") + self:append(lhs, "LazyProp") + self:append(" " .. rhs.desc):nl() + end + end end function M:progressbar() From 84ae36f30d157ad2d3fb54abdad15700429cf5b6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 12 Oct 2023 05:19:35 +0000 Subject: [PATCH 326/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index a0cd52f..4b859db 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 11 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 12 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -476,7 +476,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* -- You can define custom key maps here. If present, the description will -- be shown in the help menu. -- To disable one of the defaults, set it to false. - + ["l"] = { function(plugin) require("lazy.util").float_term({ "lazygit", "log" }, { @@ -485,7 +485,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* end, desc = "Open lazygit log", }, - + ["t"] = { function(plugin) require("lazy.util").float_term(nil, { From 117556d9e73136c434b553b29c0d32a05152eecc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 12 Oct 2023 11:40:26 +0200 Subject: [PATCH 327/815] chore(main): release 10.13.0 (#1106) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11b36a3..935ac60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.13.0](https://github.com/folke/lazy.nvim/compare/v10.12.0...v10.13.0) (2023-10-12) + + +### Features + +* **keys:** include custom keys in help menu ([#1105](https://github.com/folke/lazy.nvim/issues/1105)) ([43c284a](https://github.com/folke/lazy.nvim/commit/43c284a57870e1a7ed42782eacf444a6a752f81e)) + ## [10.12.0](https://github.com/folke/lazy.nvim/compare/v10.11.0...v10.12.0) (2023-10-11) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 81b4477..fe963d7 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.12.0" -- x-release-please-version +M.version = "10.13.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 7f70dd17497973f2a83e7e46aa7479111174e765 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 12 Oct 2023 12:23:39 +0200 Subject: [PATCH 328/815] fix(git): unset GIT_INDEX_FILE so we dont accidentally overwrite a different git repo. Fixes #1107 --- lua/lazy/manage/process.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index 00883e7..1db3677 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -64,6 +64,7 @@ function M.spawn(cmd, opts) env.GIT_DIR = nil env.GIT_WORK_TREE = nil env.GIT_TERMINAL_PROMPT = "0" + env.GIT_INDEX_FILE = nil ---@type string[] local env_flat = {} From 33c447b96e1cb1a5a2be87982d5d32bb5054079d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 12 Oct 2023 12:40:23 +0200 Subject: [PATCH 329/815] chore(main): release 10.13.1 (#1108) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 935ac60..936aa88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.13.1](https://github.com/folke/lazy.nvim/compare/v10.13.0...v10.13.1) (2023-10-12) + + +### Bug Fixes + +* **git:** unset GIT_INDEX_FILE so we dont accidentally overwrite a different git repo. Fixes [#1107](https://github.com/folke/lazy.nvim/issues/1107) ([7f70dd1](https://github.com/folke/lazy.nvim/commit/7f70dd17497973f2a83e7e46aa7479111174e765)) + ## [10.13.0](https://github.com/folke/lazy.nvim/compare/v10.12.0...v10.13.0) (2023-10-12) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index fe963d7..c68dd84 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.13.0" -- x-release-please-version +M.version = "10.13.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 37694611946387dc79d546bdc193bc8611ac1c6d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 13 Oct 2023 11:37:38 +0200 Subject: [PATCH 330/815] fix(float): disable swapfile for files shown in Float --- lua/lazy/view/float.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index f69108e..0a21b38 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -104,6 +104,8 @@ function M:mount() self.buf = self.buf elseif self.opts.file then self.buf = vim.fn.bufadd(self.opts.file) + vim.bo[self.buf].readonly = true + vim.bo[self.buf].swapfile = false vim.fn.bufload(self.buf) vim.bo[self.buf].modifiable = false elseif self.opts.buf then From 70f764bf735f74aed795188aeb8e57ccae0ae94e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 13 Oct 2023 11:37:52 +0200 Subject: [PATCH 331/815] fix(util): Util.merge now skips nil args --- lua/lazy/core/util.lua | 11 ++++------- tests/core/util_spec.lua | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index dd9b2a9..0b27797 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -396,22 +396,19 @@ end ---@param ... T ---@return T function M.merge(...) - local values = { ... } - local ret = values[1] - + local ret = select(1, ...) if ret == vim.NIL then ret = nil end - - for i = 2, #values, 1 do - local value = values[i] + for i = 2, select("#", ...) do + local value = select(i, ...) if can_merge(ret) and can_merge(value) then for k, v in pairs(value) do ret[k] = M.merge(ret[k], v) end elseif value == vim.NIL then ret = nil - else + elseif value ~= nil then ret = value end end diff --git a/tests/core/util_spec.lua b/tests/core/util_spec.lua index 97c42c7..1d3592c 100644 --- a/tests/core/util_spec.lua +++ b/tests/core/util_spec.lua @@ -101,6 +101,22 @@ describe("util", function() input = { { a = 1 }, { b = 2 } }, output = { a = 1, b = 2 }, }, + { + input = { nil, { a = 1 }, { b = 2 } }, + output = { a = 1, b = 2 }, + }, + { + input = { { a = 1 }, { b = 2 }, nil }, + output = { a = 1, b = 2 }, + }, + { + input = { { a = 1 }, nil, { b = 2 } }, + output = { a = 1, b = 2 }, + }, + { + input = { nil, { a = 1 }, nil, { b = 2 }, nil }, + output = { a = 1, b = 2 }, + }, { input = { { a = 1 }, { a = 2 } }, output = { a = 2 }, @@ -120,7 +136,11 @@ describe("util", function() } for _, test in ipairs(tests) do - assert.same(test.output, Util.merge(unpack(test.input))) + local n = 0 + for i in pairs(test.input) do + n = math.max(n, i) + end + assert.same(test.output, Util.merge(unpack(test.input, 1, n))) end end) end) From e15dfab3c3729af6e54df2828c82db9698ba2c0a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 13 Oct 2023 09:38:43 +0000 Subject: [PATCH 332/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 4b859db..b602b6a 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 12 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 13 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From a026f7395324aad8df1cbd45112d620f528123ba Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 13 Oct 2023 12:37:41 +0200 Subject: [PATCH 333/815] docs: fix types for `keys`. Fixes #1109 --- README.md | 2 +- lua/lazy/types.lua | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 13b25e1..86cc9ef 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ require("lazy").setup({ | **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` or `{event:string[]\|string, pattern?:string[]\|string}` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | | **cmd** | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]` | Lazy-load on command | | **ft** | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]` | Lazy-load on filetype | -| **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | +| **keys** | `string?` or `string[]` or `LazyKeysSpec[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[]` | Lazy-load on key mapping | | **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | | **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | | **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins | diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index e83b9c4..54c0930 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -61,10 +61,10 @@ ---@field _ LazyPluginState ---@class LazyPluginSpecHandlers ----@field event? string[]|string|fun(self:LazyPlugin, event:string[]):string[] +---@field event? string[]|string|LazyEventSpec[]|fun(self:LazyPlugin, event:string[]):string[] ---@field cmd? string[]|string|fun(self:LazyPlugin, cmd:string[]):string[] ---@field ft? string[]|string|fun(self:LazyPlugin, ft:string[]):string[] ----@field keys? string|string[]|LazyKeys[]|fun(self:LazyPlugin, keys:string[]):(string|LazyKeys)[] +---@field keys? string|string[]|LazyKeysSpec[]|fun(self:LazyPlugin, keys:string[]):(string|LazyKeys)[] ---@field module? false ---@class LazyPluginSpec: LazyPluginBase,LazyPluginSpecHandlers,LazyPluginHooks,LazyPluginRef From 8a6379eddd2bffaad20aefe74580c1b546477ae8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 13 Oct 2023 10:38:26 +0000 Subject: [PATCH 334/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 162 +++++++++++++++++++++++----------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b602b6a..878faa9 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -103,113 +103,113 @@ It is recommended to run `:checkhealth lazy` after installation. PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* - -------------------------------------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------------------------------------------ ---------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format + ------------------------------------------------------------------------------------------------------------------------------------ + 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 + 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 included in the spec + enabled boolean? or fun():boolean When false, or if the function returns false, then + this plugin will not be included in the spec - cond boolean? or fun(LazyPlugin):boolean When false, or if the function returns false, then - this plugin will not be loaded. Useful to disable - some plugins in vscode, or firenvim for example. + cond boolean? or fun(LazyPlugin):boolean When false, or if the function returns false, then + this plugin will not be loaded. Useful to disable + some plugins in vscode, or firenvim for example. - dependencies LazySpec[] A list of plugin names or plugin specs that should - be loaded when the plugin loads. Dependencies are - always lazy-loaded unless specified otherwise. When - specifying a name, make sure the plugin spec has - been defined somewhere else. + dependencies LazySpec[] A list of plugin names or plugin specs that should + be loaded when the plugin loads. Dependencies are + always lazy-loaded unless specified otherwise. When + specifying a name, make sure the plugin spec has + been defined somewhere else. - init fun(LazyPlugin) init functions are always executed during startup + init fun(LazyPlugin) init functions are always executed during startup - opts table or fun(LazyPlugin, opts:table) opts should be a table (will be merged with parent - specs), return a table (replaces parent specs) or - should change a table. The table will be passed to - the Plugin.config() function. Setting this value - will imply Plugin.config() + opts table or fun(LazyPlugin, opts:table) opts should be a table (will be merged with parent + specs), return a table (replaces parent specs) or + should change a table. The table will be passed to + the Plugin.config() function. Setting this value + will imply Plugin.config() - config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The - default implementation will automatically run - require(MAIN).setup(opts). Lazy uses several - heuristics to determine the plugin’s MAIN module - automatically based on the plugin’s name. See also - opts. To use the default implementation without opts - set config to true. + config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The + default implementation will automatically run + require(MAIN).setup(opts). Lazy uses several + heuristics to determine the plugin’s MAIN module + automatically based on the plugin’s name. See also + opts. To use the default implementation without opts + set config to true. - main string? You can specify the main module to use for config() - and opts(), in case it can not be determined - automatically. See config() + main string? You can specify the main module to use for config() + and opts(), in case it can not be determined + automatically. See config() - build fun(LazyPlugin) or string or a list of build commands build is executed when a plugin is installed or - updated. Before running build, a plugin is first - loaded. 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. Some plugins provide their - own build.lua which is automatically used by lazy. - So no need to specify a build step for those - plugins. + build fun(LazyPlugin) or string or a list of build commands build is executed when a plugin is installed or + updated. Before running build, a plugin is first + loaded. 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. Some plugins provide their + own build.lua which is automatically used by lazy. + So no need to specify a build step for those + plugins. - 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? or false to override the default Version to use from the repository. Full Semver - ranges are supported + version string? or false to override the default Version to use from the repository. Full 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 - submodules boolean? When false, git submodules will not be fetched. - Defaults to true + submodules boolean? When false, git submodules will not be fetched. + Defaults to true - event string? or string[] or Lazy-load on event. Events can be specified as - fun(self:LazyPlugin, event:string[]):string[] or BufEnter or with a pattern like BufEnter *.lua - {event:string[]\|string, pattern?:string[]\|string} + event string? or string[] or Lazy-load on event. Events can be specified as + fun(self:LazyPlugin, event:string[]):string[] or BufEnter or with a pattern like BufEnter *.lua + {event:string[]\|string, pattern?:string[]\|string} - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] - keys string? or string[] or LazyKeys[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[] + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - 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 - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is - 50. It’s recommended to set this to a high number - for colorschemes. + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is + 50. It’s recommended to set this to a high number + for colorschemes. - optional boolean? When a spec is tagged optional, it will only be - included in the final spec, when the same plugin has - been specified at least once somewhere else without - optional. This is mainly useful for Neovim distros, - to allow setting options on plugins that may/may not - be part of the user’s plugins - -------------------------------------------------------------------------------------------------------------------------------- + optional boolean? When a spec is tagged optional, it will only be + included in the final spec, when the same plugin has + been specified at least once somewhere else without + optional. This is mainly useful for Neovim distros, + to allow setting options on plugins that may/may not + be part of the user’s plugins + ------------------------------------------------------------------------------------------------------------------------------------ LAZY LOADING ~ From 9f5637f1d7112637df29ca1104540874e9c84b72 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 13 Oct 2023 13:14:39 +0200 Subject: [PATCH 335/815] docs: another LazyKeys reference. Fixes #1109 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 86cc9ef..9fcf781 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ when doing `colorscheme foobar`. #### ⌨️ Lazy Key Mappings The `keys` property can be a `string` or `string[]` for simple normal-mode mappings, or it -can be a `LazyKeys` table with the following key-value pairs: +can be a `LazyKeysSpec` table with the following key-value pairs: - **[1]**: (`string`) lhs **_(required)_** - **[2]**: (`string|fun()`) rhs **_(optional)_** From 8d712c8e5d7ee0c43713934e955a17e39a1aad72 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 13 Oct 2023 11:15:19 +0000 Subject: [PATCH 336/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 878faa9..6b76d6a 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -249,7 +249,8 @@ automagically load when doing `colorscheme foobar`. LAZY KEY MAPPINGS The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeys` table with the following key-value pairs: +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: - **[1]**(`string`) lhs **(required)** - **[2]**(`string|fun()`) rhs **(optional)** From 276e572f645430bcfd6fd25faa301ea9077f6ab1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 Oct 2023 13:17:52 +0200 Subject: [PATCH 337/815] chore(main): release 10.13.2 (#1110) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 936aa88..fbb9bdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [10.13.2](https://github.com/folke/lazy.nvim/compare/v10.13.1...v10.13.2) (2023-10-13) + + +### Bug Fixes + +* **float:** disable swapfile for files shown in Float ([3769461](https://github.com/folke/lazy.nvim/commit/37694611946387dc79d546bdc193bc8611ac1c6d)) +* **util:** Util.merge now skips nil args ([70f764b](https://github.com/folke/lazy.nvim/commit/70f764bf735f74aed795188aeb8e57ccae0ae94e)) + ## [10.13.1](https://github.com/folke/lazy.nvim/compare/v10.13.0...v10.13.1) (2023-10-12) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index c68dd84..c77936a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.13.1" -- x-release-please-version +M.version = "10.13.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From ad5da0ae20beca5dd89cb17c515c237c46c37b1e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 14 Oct 2023 16:00:30 +0200 Subject: [PATCH 338/815] fix(ui): sort lazy plugin handlers --- lua/lazy/view/render.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index fca229b..b5d83a0 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -429,6 +429,7 @@ function M:plugin(plugin) end return value end, vim.tbl_values(values)) + table.sort(values) reason[handler] = table.concat(values, " ") end end From 2b8b8b020b2922722cbc2bd2f51b894699689c1f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 14 Oct 2023 14:01:16 +0000 Subject: [PATCH 339/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 6b76d6a..dead002 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 13 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 14 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From a27935e0d4d14658f976f50042b98d254b8c13fd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 14 Oct 2023 17:02:44 +0200 Subject: [PATCH 340/815] chore(main): release 10.13.3 (#1116) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbb9bdc..9a05737 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.13.3](https://github.com/folke/lazy.nvim/compare/v10.13.2...v10.13.3) (2023-10-14) + + +### Bug Fixes + +* **ui:** sort lazy plugin handlers ([ad5da0a](https://github.com/folke/lazy.nvim/commit/ad5da0ae20beca5dd89cb17c515c237c46c37b1e)) + ## [10.13.2](https://github.com/folke/lazy.nvim/compare/v10.13.1...v10.13.2) (2023-10-13) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index c77936a..9652da0 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.13.2" -- x-release-please-version +M.version = "10.13.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From a993bfd6de7266c531b1f462a1d64e307b4ca349 Mon Sep 17 00:00:00 2001 From: sibouras <64098483+sibouras@users.noreply.github.com> Date: Sat, 14 Oct 2023 16:14:45 +0100 Subject: [PATCH 341/815] docs: update git.log in readme (#1115) * docs: update git.log in readme * Revert "docs: update git.log in readme" This reverts commit ff602aa987cde7324a9d15f2f888628f2741ea3f. * update git.log in lazy.core.config --- lua/lazy/core/config.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9652da0..f38ee1f 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -20,8 +20,8 @@ M.defaults = { concurrency = jit.os:find("Windows") and (vim.loop.available_parallelism() * 2) or nil, ---@type number limit the maximum amount of concurrent tasks git = { -- defaults for the `Lazy log` command - -- log = { "-10" }, -- show the last 10 commits - log = { "-8" }, -- show commits from the last 3 days + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits timeout = 120, -- kill processes that take more than 2 minutes url_format = "https://github.com/%s.git", -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, From 3b31897275d5c09e2654db1c163b87eb383ca25e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 14 Oct 2023 17:30:24 +0200 Subject: [PATCH 342/815] fix(cmd): lazy-cmds no longer show an error for buffer-local commands --- lua/lazy/core/handler/cmd.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/handler/cmd.lua b/lua/lazy/core/handler/cmd.lua index 6ff9623..ef7a2bd 100644 --- a/lua/lazy/core/handler/cmd.lua +++ b/lua/lazy/core/handler/cmd.lua @@ -33,7 +33,7 @@ function M:_add(cmd) self:_load(cmd) - local info = vim.api.nvim_get_commands({})[cmd] + local info = vim.api.nvim_get_commands({})[cmd] or vim.api.nvim_buf_get_commands(0, {})[cmd] if not info then return Util.error("Command `" .. cmd .. "` not found after loading " .. plugins) end From 1c16e4236f0937e8955865a0e5e046c7dafbc4b5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 14 Oct 2023 17:33:31 +0200 Subject: [PATCH 343/815] chore(main): release 10.13.4 (#1117) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a05737..95c49a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.13.4](https://github.com/folke/lazy.nvim/compare/v10.13.3...v10.13.4) (2023-10-14) + + +### Bug Fixes + +* **cmd:** lazy-cmds no longer show an error for buffer-local commands ([3b31897](https://github.com/folke/lazy.nvim/commit/3b31897275d5c09e2654db1c163b87eb383ca25e)) + ## [10.13.3](https://github.com/folke/lazy.nvim/compare/v10.13.2...v10.13.3) (2023-10-14) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f38ee1f..cf278a9 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.13.3" -- x-release-please-version +M.version = "10.13.4" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 0c53d4673ff02c57a192558325b394cfd9adde0f Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 14 Oct 2023 23:07:01 +0200 Subject: [PATCH 344/815] feat(plugin): treat url changes as warnings. They will only be shown with checkhealth --- lua/lazy/core/plugin.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 3e5743a..dbfcb46 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -441,7 +441,7 @@ function Spec:merge(old, new) new._.dep = old._.dep and new._.dep if new.url and old.url and new.url ~= old.url then - self:error("Two plugins with the same name and different url:\n" .. vim.inspect({ old = old, new = new })) + self:warn("Two plugins with the same name and different url:\n" .. vim.inspect({ old = old, new = new })) end if new.dependencies and old.dependencies then From 3dc413d6fd279dfff777a9f9a964697a16c5aabc Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 15 Oct 2023 08:36:15 +0200 Subject: [PATCH 345/815] fix(plugin): improved dir/dev merging. Fixes #993 --- lua/lazy/core/plugin.lua | 38 +++++++++++++++++++++++++++----------- lua/lazy/types.lua | 1 + tests/core/plugin_spec.lua | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 11 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index dbfcb46..a915d8f 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -84,8 +84,11 @@ function Spec:add(plugin, results) end end + ---@type string? + local dir + if plugin.dir then - plugin.dir = Util.norm(plugin.dir) + dir = Util.norm(plugin.dir) -- local plugin plugin.name = plugin.name or Spec.get_name(plugin.dir) elseif plugin.url then @@ -99,16 +102,6 @@ function Spec:add(plugin, results) end end end - -- dev plugins - if - plugin.dev - and (not Config.options.dev.fallback or vim.fn.isdirectory(Config.options.dev.path .. "/" .. plugin.name) == 1) - then - plugin.dir = Config.options.dev.path .. "/" .. plugin.name - else - -- remote plugin - plugin.dir = Config.options.root .. "/" .. plugin.name - end elseif is_ref then plugin.name = plugin[1] else @@ -121,6 +114,17 @@ function Spec:add(plugin, results) return 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 + elseif plugin.dev == false then + -- explicitely select the default path + dir = Config.options.root .. "/" .. plugin.name + end + if type(plugin.config) == "table" then self:warn( "{" .. plugin.name .. "}: setting a table to `Plugin.config` is deprecated. Please use `Plugin.opts` instead" @@ -134,12 +138,15 @@ function Spec:add(plugin, results) M.last_fid = M.last_fid + 1 plugin._ = { + dir = dir, fid = M.last_fid, fpid = fpid, dep = fpid ~= nil, module = self.importing, } self.fragments[plugin._.fid] = plugin + -- remote plugin + plugin.dir = plugin._.dir or (plugin.name and (Config.options.root .. "/" .. plugin.name)) or nil if fpid then local parent = self.fragments[fpid] @@ -328,11 +335,14 @@ end function Spec:report(level) level = level or vim.log.levels.ERROR + local count = 0 for _, notif in ipairs(self.notifs) do if notif.level >= level then Util.notify(notif.msg, { level = notif.level }) + count = count + 1 end end + return count end ---@param spec LazySpec|LazySpecImport @@ -448,6 +458,12 @@ function Spec:merge(old, new) Util.extend(new.dependencies, old.dependencies) end + local new_dir = new._.dir or old._.dir or (new.name and (Config.options.root .. "/" .. new.name)) or nil + if new_dir ~= new.dir then + self:warn("Plugin `" .. new.name .. "` changed `dir`:\n- from: `" .. new.dir .. "`\n- to: `" .. new_dir .. "`") + end + new.dir = new_dir + new._.super = old setmetatable(new, { __index = old }) diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 54c0930..0434359 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -18,6 +18,7 @@ ---@field cond? boolean ---@field super? LazyPlugin ---@field module? string +---@field dir? string Explicit dir or dev set for this plugin ---@alias PluginOpts table|fun(self:LazyPlugin, opts:table):table? diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index 15eb060..cae8542 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -50,6 +50,43 @@ describe("plugin spec url/name", function() end end) +describe("plugin spec dir", function() + local tests = { + { + "~/projects/gitsigns.nvim", + { "lewis6991/gitsigns.nvim", opts = {}, dev = true }, + { "lewis6991/gitsigns.nvim" }, + }, + { + "~/projects/gitsigns.nvim", + { "lewis6991/gitsigns.nvim", opts = {}, dev = true }, + { "gitsigns.nvim" }, + }, + { + "~/projects/gitsigns.nvim", + { "lewis6991/gitsigns.nvim", opts = {} }, + { "lewis6991/gitsigns.nvim", dev = true }, + }, + { + "~/projects/gitsigns.nvim", + { "lewis6991/gitsigns.nvim", opts = {} }, + { "gitsigns.nvim", dev = true }, + }, + } + + for _, test in ipairs(tests) do + local dir = vim.fn.expand(test[1]) + local input = vim.list_slice(test, 2) + it("parses dir " .. vim.inspect(input):gsub("%s+", " "), function() + local spec = Plugin.Spec.new(input) + local plugins = vim.tbl_values(spec.plugins) + assert(spec:report() == 0) + assert.equal(1, #plugins) + assert.same(dir, plugins[1].dir) + end) + end +end) + describe("plugin spec opt", function() it("handles dependencies", function() Config.options.defaults.lazy = false From c8e2091e6d2836b587b9892e0fb64afaec36926a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 15 Oct 2023 08:51:54 +0200 Subject: [PATCH 346/815] fix(plugin): dont allow `dir` changes when we already loaded files from the plugin's old dir. Show an error in this case. Fixes #993 --- lua/lazy/core/loader.lua | 1 + lua/lazy/core/plugin.lua | 13 +++++++++++-- lua/lazy/types.lua | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 9e62371..bc41864 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -495,6 +495,7 @@ end function M.auto_load(modname, modpath) local plugin = Plugin.find(modpath) if plugin and modpath:find(plugin.dir, 1, true) == 1 then + plugin._.rtp_loaded = true -- don't load if we're loading specs or if the plugin is already loaded if not (Plugin.loading or plugin._.loaded) then if plugin.module == false then diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index a915d8f..a51806e 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -459,10 +459,19 @@ function Spec:merge(old, new) end local new_dir = new._.dir or old._.dir or (new.name and (Config.options.root .. "/" .. new.name)) or nil - if new_dir ~= new.dir then - self:warn("Plugin `" .. new.name .. "` changed `dir`:\n- from: `" .. new.dir .. "`\n- to: `" .. new_dir .. "`") + if new_dir ~= old.dir then + local msg = "Plugin `" .. new.name .. "` changed `dir`:\n- from: `" .. old.dir .. "`\n- to: `" .. new_dir .. "`" + if new._.rtp_loaded or old._.rtp_loaded then + msg = msg + .. "\n\nThis plugin was already partially loaded, so we did not change it's `dir`.\nPlease fix your config." + self:error(msg) + new_dir = old.dir + else + self:warn(msg) + end end new.dir = new_dir + new._.rtp_loaded = new._.rtp_loaded or old._.rtp_loaded new._.super = old setmetatable(new, { __index = old }) diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 0434359..dcbcf18 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -19,6 +19,7 @@ ---@field super? LazyPlugin ---@field module? string ---@field dir? string Explicit dir or dev set for this plugin +---@field rtp_loaded? boolean ---@alias PluginOpts table|fun(self:LazyPlugin, opts:table):table? From c5598617daad5fc4915032fef987c70efa48c0ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 15 Oct 2023 06:53:52 +0000 Subject: [PATCH 347/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index dead002..8d1bb74 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 14 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 15 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From ed6c9ffe2174bcfe4c17199ec4535aa4d4be1e62 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 15 Oct 2023 22:24:48 +0200 Subject: [PATCH 348/815] chore(main): release 10.14.0 (#1120) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95c49a1..a19283e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [10.14.0](https://github.com/folke/lazy.nvim/compare/v10.13.4...v10.14.0) (2023-10-15) + + +### Features + +* **plugin:** treat url changes as warnings. They will only be shown with checkhealth ([0c53d46](https://github.com/folke/lazy.nvim/commit/0c53d4673ff02c57a192558325b394cfd9adde0f)) + + +### Bug Fixes + +* **plugin:** dont allow `dir` changes when we already loaded files from the plugin's old dir. Show an error in this case. Fixes [#993](https://github.com/folke/lazy.nvim/issues/993) ([c8e2091](https://github.com/folke/lazy.nvim/commit/c8e2091e6d2836b587b9892e0fb64afaec36926a)) +* **plugin:** improved dir/dev merging. Fixes [#993](https://github.com/folke/lazy.nvim/issues/993) ([3dc413d](https://github.com/folke/lazy.nvim/commit/3dc413d6fd279dfff777a9f9a964697a16c5aabc)) + ## [10.13.4](https://github.com/folke/lazy.nvim/compare/v10.13.3...v10.13.4) (2023-10-14) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index cf278a9..7fa7a91 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.13.4" -- x-release-please-version +M.version = "10.14.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 1cfd6d1f368ab72690e31cf4d8e15c36d8b60202 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 16 Oct 2023 15:05:16 +0200 Subject: [PATCH 349/815] fix(loader): don't load handlers before installing plugins --- lua/lazy/core/handler/event.lua | 3 ++- lua/lazy/core/handler/init.lua | 11 ++++++++++- lua/lazy/core/handler/keys.lua | 3 ++- lua/lazy/core/plugin.lua | 29 +++++++++++++++++++---------- lua/lazy/types.lua | 2 ++ lua/lazy/view/render.lua | 26 ++++++++++++++------------ 6 files changed, 49 insertions(+), 25 deletions(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index dd1a38f..018d04b 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -64,10 +64,11 @@ end ---@param plugin LazyPlugin function M:values(plugin) + local Plugin = require("lazy.core.plugin") ---@type table local values = {} ---@diagnostic disable-next-line: no-unknown - for _, value in ipairs(plugin[self.type] or {}) do + for _, value in ipairs(Plugin.values(plugin, self.type, true)) do local event = self:parse(value) values[event.id] = event end diff --git a/lua/lazy/core/handler/init.lua b/lua/lazy/core/handler/init.lua index 127ccae..8a5179d 100644 --- a/lua/lazy/core/handler/init.lua +++ b/lua/lazy/core/handler/init.lua @@ -39,6 +39,10 @@ end ---@param plugin LazyPlugin function M.disable(plugin) + if not plugin._.handlers_enabled then + return + end + plugin._.handlers_enabled = false for type, handler in pairs(M.handlers) do if plugin[type] then handler:del(plugin) @@ -49,11 +53,15 @@ end ---@param plugin LazyPlugin function M.enable(plugin) if not plugin._.loaded then + if plugin._.handlers_enabled then + return + end for type, handler in pairs(M.handlers) do if plugin[type] then handler:add(plugin) end end + plugin._.handlers_enabled = true end end @@ -80,10 +88,11 @@ function M:_del(_value) end ---@param plugin LazyPlugin function M:values(plugin) + local Plugin = require("lazy.core.plugin") ---@type table local values = {} ---@diagnostic disable-next-line: no-unknown - for _, value in ipairs(plugin[self.type] or {}) do + for _, value in ipairs(Plugin.values(plugin, self.type, true)) do values[value] = value end return values diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 9a87128..a7f7f68 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -52,7 +52,8 @@ end ---@param plugin LazyPlugin function M:values(plugin) - return M.resolve(plugin.keys) + local Plugin = require("lazy.core.plugin") + return M.resolve(Plugin.values(plugin, "keys", true)) end ---@param spec? (string|LazyKeysSpec)[] diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index a51806e..9c36f71 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -42,15 +42,6 @@ end function Spec:parse(spec) self:normalize(spec) self:fix_disabled() - - -- calculate handlers - for _, plugin in pairs(self.plugins) do - for _, handler in pairs(Handler.types) do - if plugin[handler] then - plugin[handler] = M.values(plugin, handler, true) - end - end - end end -- PERF: optimized code to get package name without using lua patterns @@ -609,8 +600,26 @@ end ---@param prop string ---@param is_list? boolean function M.values(plugin, prop, is_list) + if not plugin[prop] then + return {} + end + plugin._.values = plugin._.values or {} + local key = prop .. (is_list and "_list" or "") + if plugin._.values[key] == nil then + plugin[prop] = M._values(plugin, prop, is_list) + plugin._.values[key] = true + end + return plugin[prop] or {} +end + +-- Merges super values or runs the values function to override values or return new ones +-- Used for opts, cmd, event, ft and keys +---@param plugin LazyPlugin +---@param prop string +---@param is_list? boolean +function M._values(plugin, prop, is_list) ---@type table - local ret = plugin._.super and M.values(plugin._.super, prop, is_list) or {} + local ret = plugin._.super and M._values(plugin._.super, prop, is_list) or {} local values = rawget(plugin, prop) if not values then diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index dcbcf18..346d8e4 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -20,6 +20,8 @@ ---@field module? string ---@field dir? string Explicit dir or dev set for this plugin ---@field rtp_loaded? boolean +---@field values? table +---@field handlers_enabled? boolean ---@alias PluginOpts table|fun(self:LazyPlugin, opts:table):table? diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index b5d83a0..df37b74 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -415,7 +415,7 @@ function M:plugin(plugin) else self:append(" ") local reason = {} - if plugin._.kind ~= "disabled" then + if plugin._.kind ~= "disabled" and plugin._.handlers_enabled then for handler in pairs(Handler.types) do if plugin[handler] then local values = Handler.handlers[handler]:values(plugin) @@ -542,17 +542,19 @@ function M:details(plugin) end end) - for handler in pairs(Handler.types) do - if plugin[handler] then - table.insert(props, { - handler, - function() - for _, value in ipairs(plugin[handler]) do - self:reason({ [handler] = value }) - self:append(" ") - end - end, - }) + if plugin._.handlers_enabled then + for handler in pairs(Handler.types) do + if plugin[handler] then + table.insert(props, { + handler, + function() + for _, value in ipairs(Plugin.values(plugin, handler, true)) do + self:reason({ [handler] = value }) + self:append(" ") + end + end, + }) + end end end self:props(props, { indent = 6 }) From 1ea2eaefa66fdc5a2a7e7b9309c11291cca0a020 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 16 Oct 2023 15:11:01 +0200 Subject: [PATCH 350/815] test: fixed tests for plugin spec --- tests/core/plugin_spec.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index cae8542..6df2e81 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -237,6 +237,7 @@ describe("plugin spec opt", function() local spec = Plugin.Spec.new(test) assert(#spec.notifs == 0) assert(vim.tbl_count(spec.plugins) == 1) + Plugin.values(spec.plugins.bar, "event", true) assert(type(spec.plugins.bar.event) == "table") assert(#spec.plugins.bar.event == 2) assert(vim.tbl_contains(spec.plugins.bar.event, "mod1")) @@ -299,6 +300,7 @@ describe("plugin spec opt", function() local spec = Plugin.Spec.new(test) assert(#spec.notifs == 0) assert(vim.tbl_count(spec.plugins) == 1) + Plugin.values(spec.plugins.bar, "event", true) assert(type(spec.plugins.bar.event) == "table") assert(#spec.plugins.bar.event == 2) assert(vim.tbl_contains(spec.plugins.bar.event, "mod1")) From 24a93426c412f356b3dc51d5f9d4604689bb7dbe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 16 Oct 2023 13:12:01 +0000 Subject: [PATCH 351/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 8d1bb74..80df4c9 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 15 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 16 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 239f0fa9c181150656ed23e33465349b61a3ed20 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 15:30:19 +0200 Subject: [PATCH 352/815] chore(main): release 10.14.1 (#1123) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a19283e..6cdb490 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.14.1](https://github.com/folke/lazy.nvim/compare/v10.14.0...v10.14.1) (2023-10-16) + + +### Bug Fixes + +* **loader:** don't load handlers before installing plugins ([1cfd6d1](https://github.com/folke/lazy.nvim/commit/1cfd6d1f368ab72690e31cf4d8e15c36d8b60202)) + ## [10.14.0](https://github.com/folke/lazy.nvim/compare/v10.13.4...v10.14.0) (2023-10-15) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 7fa7a91..06ed181 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.14.0" -- x-release-please-version +M.version = "10.14.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 2270bbbc48503f468633cc5c2065321001c4f0ac Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 16 Oct 2023 18:11:02 +0200 Subject: [PATCH 353/815] fix(plugin): work-around for Plugin.values error. Will add proper fix later. Fixes #1124 --- lua/lazy/core/plugin.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 9c36f71..d9ad3ac 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -556,6 +556,10 @@ function M.load() Config.plugins[name]._ = plugin._ Config.plugins[name]._.dep = dep Config.plugins[name]._.super = super + -- FIXME: work-around for changes related to Plugin.values + for handler in pairs(Handler) do + Config.plugins[name][handler] = plugin[handler] + end end end Util.track() From b9c604e839e854bc999e99b90319f1b49776aeac Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 18:18:42 +0200 Subject: [PATCH 354/815] chore(main): release 10.14.2 (#1125) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cdb490..8998644 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.14.2](https://github.com/folke/lazy.nvim/compare/v10.14.1...v10.14.2) (2023-10-16) + + +### Bug Fixes + +* **plugin:** work-around for Plugin.values error. Will add proper fix later. Fixes [#1124](https://github.com/folke/lazy.nvim/issues/1124) ([2270bbb](https://github.com/folke/lazy.nvim/commit/2270bbbc48503f468633cc5c2065321001c4f0ac)) + ## [10.14.1](https://github.com/folke/lazy.nvim/compare/v10.14.0...v10.14.1) (2023-10-16) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 06ed181..beafd4c 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.14.1" -- x-release-please-version +M.version = "10.14.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 2f169e74d46dea437661ddefccdc1f397a073e09 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 16 Oct 2023 22:34:44 +0200 Subject: [PATCH 355/815] refactor(handlers): lazy resolving of plugin handlers (#1126) * refactor(handlers): lazy resolving of plugin handlers * test: fixed tests --- lua/lazy/core/config.lua | 4 +- lua/lazy/core/handler/event.lua | 15 +------ lua/lazy/core/handler/ft.lua | 3 +- lua/lazy/core/handler/init.lua | 61 +++++++++++++++----------- lua/lazy/core/handler/keys.lua | 21 ++++++--- lua/lazy/core/plugin.lua | 23 +++++----- lua/lazy/types.lua | 15 +++---- lua/lazy/view/render.lua | 76 +++++++++++++++------------------ tests/core/plugin_spec.lua | 28 +++++++----- 9 files changed, 126 insertions(+), 120 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index beafd4c..0ed35ee 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -55,7 +55,7 @@ M.defaults = { icons = { cmd = " ", config = "", - event = "", + event = " ", ft = " ", init = " ", import = " ", @@ -67,7 +67,7 @@ M.defaults = { runtime = " ", require = "󰢱 ", source = " ", - start = "", + start = " ", task = "✔ ", list = { "●", diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index 018d04b..aff4572 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -37,7 +37,7 @@ M.group = vim.api.nvim_create_augroup("lazy_handler_event", { clear = true }) ---@param spec LazyEventSpec ---@return LazyEvent -function M:parse(spec) +function M:_parse(spec) local ret = M.mappings[spec] --[[@as LazyEvent?]] if ret then return ret @@ -62,19 +62,6 @@ function M:parse(spec) return ret end ----@param plugin LazyPlugin -function M:values(plugin) - local Plugin = require("lazy.core.plugin") - ---@type table - local values = {} - ---@diagnostic disable-next-line: no-unknown - for _, value in ipairs(Plugin.values(plugin, self.type, true)) do - local event = self:parse(value) - values[event.id] = event - end - return values -end - ---@param event LazyEvent function M:_add(event) local done = false diff --git a/lua/lazy/core/handler/ft.lua b/lua/lazy/core/handler/ft.lua index 7af2b9a..9b33d37 100644 --- a/lua/lazy/core/handler/ft.lua +++ b/lua/lazy/core/handler/ft.lua @@ -13,7 +13,8 @@ function M:add(plugin) end end -function M:parse(value) +---@return LazyEvent +function M:_parse(value) return { id = value, event = "FileType", diff --git a/lua/lazy/core/handler/init.lua b/lua/lazy/core/handler/init.lua index 8a5179d..ba45de5 100644 --- a/lua/lazy/core/handler/init.lua +++ b/lua/lazy/core/handler/init.lua @@ -39,29 +39,20 @@ end ---@param plugin LazyPlugin function M.disable(plugin) - if not plugin._.handlers_enabled then - return - end - plugin._.handlers_enabled = false - for type, handler in pairs(M.handlers) do - if plugin[type] then - handler:del(plugin) - end + for type in pairs(plugin._.handlers or {}) do + M.handlers[type]:del(plugin) end end ---@param plugin LazyPlugin function M.enable(plugin) if not plugin._.loaded then - if plugin._.handlers_enabled then - return + if not plugin._.handlers then + M.load(plugin) end - for type, handler in pairs(M.handlers) do - if plugin[type] then - handler:add(plugin) - end + for type in pairs(plugin._.handlers or {}) do + M.handlers[type]:add(plugin) end - plugin._.handlers_enabled = true end end @@ -86,21 +77,40 @@ function M:_add(_value) end ---@protected function M:_del(_value) end +---@param value any +---@param _plugin LazyPlugin +---@return string|{id:string} +function M:_parse(value, _plugin) + assert(type(value) == "string", "Expected string, got " .. vim.inspect(value)) + return value +end + +---@param values any[] ---@param plugin LazyPlugin -function M:values(plugin) - local Plugin = require("lazy.core.plugin") +function M:_values(values, plugin) ---@type table - local values = {} - ---@diagnostic disable-next-line: no-unknown - for _, value in ipairs(Plugin.values(plugin, self.type, true)) do - values[value] = value + local ret = {} + for _, value in ipairs(values) do + local parsed = self:_parse(value, plugin) + ret[type(parsed) == "string" and parsed or parsed.id] = parsed + end + return ret +end + +---@param plugin LazyPlugin +function M.load(plugin) + local Plugin = require("lazy.core.plugin") + plugin._.handlers = {} + for type, handler in pairs(M.handlers) do + if plugin[type] then + plugin._.handlers[type] = handler:_values(Plugin.values(plugin, type, true), plugin) + end end - return values end ---@param plugin LazyPlugin function M:add(plugin) - for key, value in pairs(self:values(plugin)) do + for key, value in pairs(plugin._.handlers[self.type] or {}) do if not self.active[key] then self.active[key] = {} self:_add(value) @@ -112,7 +122,10 @@ end ---@param plugin LazyPlugin function M:del(plugin) - for key, value in pairs(self:values(plugin)) do + if not plugin._.handlers then + return + end + for key, value in pairs(plugin._.handlers[self.type] or {}) do if self.active[key] and self.active[key][plugin.name] then self.active[key][plugin.name] = nil if vim.tbl_isempty(self.active[key]) then diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index a7f7f68..e19d6e5 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -19,10 +19,13 @@ local Util = require("lazy.core.util") ---@field rhs? string|fun() rhs ---@field mode? string ---@field id string +---@field name string ---@class LazyKeysHandler:LazyHandler local M = {} +local skip = { mode = true, id = true, ft = true, rhs = true, lhs = true } + ---@param value string|LazyKeysSpec ---@param mode? string ---@return LazyKeys @@ -37,12 +40,18 @@ function M.parse(value, mode) ret[2] = nil ret.mode = mode or "n" ret.id = vim.api.nvim_replace_termcodes(ret.lhs, true, true, true) + if ret.mode ~= "n" then ret.id = ret.id .. " (" .. ret.mode .. ")" end return ret end +---@param keys LazyKeys +function M.to_string(keys) + return keys.lhs .. (keys.mode == "n" and "" or " (" .. keys.mode .. ")") +end + ---@param lhs string ---@param mode? string function M:have(lhs, mode) @@ -50,10 +59,8 @@ function M:have(lhs, mode) return self.managed[keys.id] ~= nil end ----@param plugin LazyPlugin -function M:values(plugin) - local Plugin = require("lazy.core.plugin") - return M.resolve(Plugin.values(plugin, "keys", true)) +function M:_values(values) + return M.resolve(values) end ---@param spec? (string|LazyKeysSpec)[] @@ -79,7 +86,6 @@ end ---@param keys LazyKeys function M.opts(keys) - local skip = { mode = true, id = true, ft = true, rhs = true, lhs = true } local opts = {} ---@type LazyKeysBase ---@diagnostic disable-next-line: no-unknown for k, v in pairs(keys) do @@ -106,8 +112,9 @@ function M:_add(keys) self.active[keys.id] = nil if plugins then - Util.track({ keys = lhs }) - Loader.load(plugins, { keys = lhs }) + local name = M.to_string(keys) + Util.track({ keys = name }) + Loader.load(plugins, { keys = name }) Util.track() end diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index d9ad3ac..229b6bf 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -556,10 +556,6 @@ function M.load() Config.plugins[name]._ = plugin._ Config.plugins[name]._.dep = dep Config.plugins[name]._.super = super - -- FIXME: work-around for changes related to Plugin.values - for handler in pairs(Handler) do - Config.plugins[name][handler] = plugin[handler] - end end end Util.track() @@ -607,29 +603,32 @@ function M.values(plugin, prop, is_list) if not plugin[prop] then return {} end - plugin._.values = plugin._.values or {} + plugin._.cache = plugin._.cache or {} local key = prop .. (is_list and "_list" or "") - if plugin._.values[key] == nil then - plugin[prop] = M._values(plugin, prop, is_list) - plugin._.values[key] = true + if plugin._.cache[key] == nil then + plugin._.cache[key] = M._values(plugin, plugin, prop, is_list) end - return plugin[prop] or {} + return plugin._.cache[key] end -- Merges super values or runs the values function to override values or return new ones -- Used for opts, cmd, event, ft and keys +---@param root LazyPlugin ---@param plugin LazyPlugin ---@param prop string ---@param is_list? boolean -function M._values(plugin, prop, is_list) +function M._values(root, plugin, prop, is_list) + if not plugin[prop] then + return {} + end ---@type table - local ret = plugin._.super and M._values(plugin._.super, prop, is_list) or {} + local ret = plugin._.super and M._values(root, plugin._.super, prop, is_list) or {} local values = rawget(plugin, prop) if not values then return ret elseif type(values) == "function" then - ret = values(plugin, ret) or ret + ret = values(root, ret) or ret return type(ret) == "table" and ret or { ret } end diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 346d8e4..0525ca0 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -20,8 +20,8 @@ ---@field module? string ---@field dir? string Explicit dir or dev set for this plugin ---@field rtp_loaded? boolean ----@field values? table ----@field handlers_enabled? boolean +---@field handlers? LazyPluginHandlers +---@field cache? table ---@alias PluginOpts table|fun(self:LazyPlugin, opts:table):table? @@ -32,12 +32,11 @@ ---@field build? string|fun(self:LazyPlugin)|(string|fun(self:LazyPlugin))[] ---@field opts? PluginOpts ----@class LazyPluginHandlers ----@field event? LazyEventSpec[] ----@field cmd? string[] ----@field ft? string[] ----@field keys? (string|LazyKeysSpec)[] ----@field module? false +---@class LazyPluginHandlers: {[string]: any} +---@field event? table +---@field ft? table +---@field keys? table +---@field cmd? table ---@class LazyPluginRef ---@field branch? string diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index df37b74..770abf8 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -1,6 +1,7 @@ local Config = require("lazy.core.config") local Git = require("lazy.manage.git") local Handler = require("lazy.core.handler") +local Keys = require("lazy.core.handler.keys") local Plugin = require("lazy.core.plugin") local Sections = require("lazy.view.sections") local Util = require("lazy.util") @@ -334,12 +335,10 @@ function M:reason(reason, opts) else self:append(" ") end - if key == "keys" then - value = type(value) == "string" and value or value.lhs or value[1] - end local hl = "LazyReason" .. key:sub(1, 1):upper() .. key:sub(2) local icon = Config.options.ui.icons[key] if icon then + icon = icon:gsub("%s*$", "") self:append(icon .. " ", hl) self:append(value, hl) else @@ -411,35 +410,18 @@ function M:plugin(plugin) end local plugin_start = self:row() if plugin._.loaded then + -- When the plugin is loaded, only show the loading reason self:reason(plugin._.loaded) else + -- otherwise show all lazy handlers self:append(" ") - local reason = {} - if plugin._.kind ~= "disabled" and plugin._.handlers_enabled then - for handler in pairs(Handler.types) do - if plugin[handler] then - local values = Handler.handlers[handler]:values(plugin) - values = vim.tbl_map(function(value) - if handler == "ft" or handler == "event" then - ---@cast value LazyEvent - return value.id - elseif handler == "keys" then - ---@cast value LazyKeys - return value.lhs .. (value.mode == "n" and "" or " (" .. value.mode .. ")") - end - return value - end, vim.tbl_values(values)) - table.sort(values) - reason[handler] = table.concat(values, " ") - end - end - end + self:handlers(plugin) for _, other in pairs(Config.plugins) do if vim.tbl_contains(other.dependencies or {}, plugin.name) then - reason.plugin = other.name + self:reason({ plugin = other.name }) + self:append(" ") end end - self:reason(reason) end self:diagnostics(plugin) self:nl() @@ -542,26 +524,36 @@ function M:details(plugin) end end) - if plugin._.handlers_enabled then - for handler in pairs(Handler.types) do - if plugin[handler] then - table.insert(props, { - handler, - function() - for _, value in ipairs(Plugin.values(plugin, handler, true)) do - self:reason({ [handler] = value }) - self:append(" ") - end - end, - }) - end - end + for handler in pairs(plugin._.handlers or {}) do + table.insert(props, { + handler, + function() + self:handlers(plugin, handler) + end, + }) end self:props(props, { indent = 6 }) self:nl() end +---@param plugin LazyPlugin +---@param types? LazyHandlerTypes[]|LazyHandlerTypes +function M:handlers(plugin, types) + if not plugin._.handlers then + return + end + types = type(types) == "string" and { types } or types + types = types and types or vim.tbl_keys(Handler.types) + for _, t in ipairs(types) do + for id, value in pairs(plugin._.handlers[t] or {}) do + value = t == "keys" and Keys.to_string(value) or id + self:reason({ [t] = value }) + self:append(" ") + end + end +end + ---@alias LazyProps {[1]:string, [2]:string|fun(), [3]?:string}[] ---@param props LazyProps ---@param opts? {indent: number} @@ -690,16 +682,16 @@ function M:debug() Util.foreach(require("lazy.core.handler").handlers, function(handler_type, handler) Util.foreach(handler.active, function(value, plugins) - value = type(value) == "table" and value[1] or value + assert(type(value) == "string") if not vim.tbl_isempty(plugins) then ---@type string[] plugins = vim.tbl_values(plugins) table.sort(plugins) self:append("● ", "LazySpecial", { indent = 2 }) if handler_type == "keys" then - for k, v in pairs(Handler.handlers.keys:values(Config.plugins[plugins[1]])) do + for k, v in pairs(Config.plugins[plugins[1]]._.handlers.keys) do if k == value then - value = v + value = v.name break end end diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index 6df2e81..ee5b007 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -1,4 +1,5 @@ local Config = require("lazy.core.config") +local Handler = require("lazy.core.handler") local Plugin = require("lazy.core.plugin") local assert = require("luassert") @@ -142,6 +143,9 @@ describe("plugin spec opt", function() end) describe("deps", function() + before_each(function() + Handler.init() + end) it("handles dep names", function() Config.options.defaults.lazy = false local tests = { @@ -237,11 +241,13 @@ describe("plugin spec opt", function() local spec = Plugin.Spec.new(test) assert(#spec.notifs == 0) assert(vim.tbl_count(spec.plugins) == 1) - Plugin.values(spec.plugins.bar, "event", true) - assert(type(spec.plugins.bar.event) == "table") - assert(#spec.plugins.bar.event == 2) - assert(vim.tbl_contains(spec.plugins.bar.event, "mod1")) - assert(vim.tbl_contains(spec.plugins.bar.event, "mod2")) + Handler.load(spec.plugins.bar) + vim.print(spec.plugins.bar._.handlers) + local events = vim.tbl_keys(spec.plugins.bar._.handlers.event or {}) + assert(type(events) == "table") + assert(#events == 2) + assert(vim.tbl_contains(events, "mod1")) + assert(vim.tbl_contains(events, "mod2")) end end) end) @@ -297,14 +303,16 @@ describe("plugin spec opt", function() { { "foo/bar", event = "mod1" }, { "foo/bar", event = { "mod2" } } }, } for _, test in ipairs(tests) do + Handler.init() local spec = Plugin.Spec.new(test) assert(#spec.notifs == 0) assert(vim.tbl_count(spec.plugins) == 1) - Plugin.values(spec.plugins.bar, "event", true) - assert(type(spec.plugins.bar.event) == "table") - assert(#spec.plugins.bar.event == 2) - assert(vim.tbl_contains(spec.plugins.bar.event, "mod1")) - assert(vim.tbl_contains(spec.plugins.bar.event, "mod2")) + Handler.load(spec.plugins.bar) + local events = spec.plugins.bar._.handlers.event + assert(type(events) == "table") + assert(vim.tbl_count(events) == 2) + assert(events["mod1"]) + assert(events["mod2"]) end end) From c1b98873730d7121fec6a2f732b2083cd2cd62bf Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 16 Oct 2023 23:04:57 +0200 Subject: [PATCH 356/815] perf(plugin): cache lazy handler values --- lua/lazy/core/plugin.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 229b6bf..fc25f8d 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -594,7 +594,8 @@ function M.has_errors(plugin) return false end --- Merges super values or runs the values function to override values or return new ones +-- Merges super values or runs the values function to override values or return new ones. +-- Values are cached for performance. -- Used for opts, cmd, event, ft and keys ---@param plugin LazyPlugin ---@param prop string From 3049575bd84335c63171282c1991089f80977620 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 23:09:07 +0200 Subject: [PATCH 357/815] chore(main): release 10.14.3 (#1127) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8998644..9906d4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.14.3](https://github.com/folke/lazy.nvim/compare/v10.14.2...v10.14.3) (2023-10-16) + + +### Performance Improvements + +* **plugin:** cache lazy handler values ([c1b9887](https://github.com/folke/lazy.nvim/commit/c1b98873730d7121fec6a2f732b2083cd2cd62bf)) + ## [10.14.2](https://github.com/folke/lazy.nvim/compare/v10.14.1...v10.14.2) (2023-10-16) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 0ed35ee..59d0b67 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.14.2" -- x-release-please-version +M.version = "10.14.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From fb9795e49fcd45e99bf386c675fbca28d98bf0a6 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 17 Oct 2023 00:29:09 +0200 Subject: [PATCH 358/815] fix(ui): fixed keymaps in debug view --- lua/lazy/view/render.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 770abf8..c79be62 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -682,7 +682,6 @@ function M:debug() Util.foreach(require("lazy.core.handler").handlers, function(handler_type, handler) Util.foreach(handler.active, function(value, plugins) - assert(type(value) == "string") if not vim.tbl_isempty(plugins) then ---@type string[] plugins = vim.tbl_values(plugins) @@ -691,7 +690,7 @@ function M:debug() if handler_type == "keys" then for k, v in pairs(Config.plugins[plugins[1]]._.handlers.keys) do if k == value then - value = v.name + value = Keys.to_string(v) break end end From f73986546cadecbcc0531c14b73d4e2cd679d672 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 00:33:20 +0200 Subject: [PATCH 359/815] chore(main): release 10.14.4 (#1128) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9906d4b..3432f19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.14.4](https://github.com/folke/lazy.nvim/compare/v10.14.3...v10.14.4) (2023-10-16) + + +### Bug Fixes + +* **ui:** fixed keymaps in debug view ([fb9795e](https://github.com/folke/lazy.nvim/commit/fb9795e49fcd45e99bf386c675fbca28d98bf0a6)) + ## [10.14.3](https://github.com/folke/lazy.nvim/compare/v10.14.2...v10.14.3) (2023-10-16) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 59d0b67..cde7506 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.14.3" -- x-release-please-version +M.version = "10.14.4" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From cdfa78888159323abc931db26f3301360393fbb7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 17 Oct 2023 08:36:09 +0200 Subject: [PATCH 360/815] fix(loader): fixed event check in reload. Fixes #1124 --- lua/lazy/core/loader.lua | 6 ++++-- lua/lazy/types.lua | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index bc41864..edf9ba7 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -259,8 +259,10 @@ function M.reload(plugin) load = true end - for _, event in ipairs(plugin.event or {}) do - if event == "VimEnter" or event == "UIEnter" or event:find("VeryLazy") then + local events = plugin._.handlers and plugin._.handlers.event and plugin._.handlers.event or {} + + for _, event in pairs(events) do + if event.id:find("VimEnter") or event.id:find("UIEnter") or event.id:find("VeryLazy") then load = true break end diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 0525ca0..a3dd9b9 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -32,7 +32,7 @@ ---@field build? string|fun(self:LazyPlugin)|(string|fun(self:LazyPlugin))[] ---@field opts? PluginOpts ----@class LazyPluginHandlers: {[string]: any} +---@class LazyPluginHandlers ---@field event? table ---@field ft? table ---@field keys? table From c373663b491e2e3426a55bb199ebfccff96fbaca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 17 Oct 2023 06:36:51 +0000 Subject: [PATCH 361/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 80df4c9..5474610 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 16 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 17 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From c7298a10db9b9ef975472827e5898b0c494b70bd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 10:04:13 +0200 Subject: [PATCH 362/815] chore(main): release 10.14.5 (#1129) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3432f19..0cac2ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.14.5](https://github.com/folke/lazy.nvim/compare/v10.14.4...v10.14.5) (2023-10-17) + + +### Bug Fixes + +* **loader:** fixed event check in reload. Fixes [#1124](https://github.com/folke/lazy.nvim/issues/1124) ([cdfa788](https://github.com/folke/lazy.nvim/commit/cdfa78888159323abc931db26f3301360393fbb7)) + ## [10.14.4](https://github.com/folke/lazy.nvim/compare/v10.14.3...v10.14.4) (2023-10-16) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index cde7506..7e970e4 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.14.4" -- x-release-please-version +M.version = "10.14.5" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 7613ab2abb1bd99e039ae02030bc2c48b7626925 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 17 Oct 2023 10:29:48 +0200 Subject: [PATCH 363/815] fix(ui): running tasks are now less twitchy --- lua/lazy/manage/runner.lua | 25 ++++++++++++++++++++----- lua/lazy/types.lua | 1 + lua/lazy/view/sections.lua | 3 +++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 85c20be..0ac0c15 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -8,7 +8,7 @@ local Util = require("lazy.util") ---@field concurrency? number ---@alias PipelineStep {task:string, opts?:TaskOptions} ----@alias LazyRunnerTask {co:thread, status: {task?:LazyTask, waiting?:boolean}} +---@alias LazyRunnerTask {co:thread, status: {task?:LazyTask, waiting?:boolean}, plugin: LazyPlugin} ---@class Runner ---@field _plugins LazyPlugin[] @@ -29,6 +29,9 @@ function Runner.new(opts) else self._plugins = plugins or Config.plugins end + table.sort(self._plugins, function(a, b) + return a.name < b.name + end) self._running = {} self._on_done = {} @@ -54,12 +57,19 @@ function Runner:_resume(entry) end function Runner:resume(waiting) + if waiting then + for _, entry in ipairs(self._running) do + if entry.status then + if entry.status.waiting then + entry.status.waiting = false + entry.plugin._.working = true + end + end + end + end local running = 0 for _, entry in ipairs(self._running) do if entry.status then - if waiting and entry.status.waiting then - entry.status.waiting = false - end if not entry.status.waiting and self:_resume(entry) then running = running + 1 if self._opts.concurrency and running >= self._opts.concurrency then @@ -76,7 +86,7 @@ function Runner:start() local co = coroutine.create(self.run_pipeline) local ok, err = coroutine.resume(co, self, plugin) if ok then - table.insert(self._running, { co = co, status = {} }) + table.insert(self._running, { co = co, status = {}, plugin = plugin }) else Util.error("Could not start tasks for " .. plugin.name .. "\n" .. err) end @@ -99,21 +109,26 @@ end ---@async ---@param plugin LazyPlugin function Runner:run_pipeline(plugin) + plugin._.working = true coroutine.yield() for _, step in ipairs(self._pipeline) do if step.task == "wait" then + plugin._.working = false coroutine.yield({ waiting = true }) + plugin._.working = true else local task = self:queue(plugin, step.task, step.opts) if task then coroutine.yield({ task = task }) assert(task:is_done()) if task.error then + plugin._.working = false return end end end end + plugin._.working = false end ---@param plugin LazyPlugin diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index a3dd9b9..222acbe 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -8,6 +8,7 @@ ---@field loaded? {[string]:string}|{time:number} ---@field installed? boolean ---@field tasks? LazyTask[] +---@field working? boolean ---@field dirty? boolean ---@field updated? {from:string, to:string} ---@field is_local? boolean diff --git a/lua/lazy/view/sections.lua b/lua/lazy/view/sections.lua index 8325332..0c1f578 100644 --- a/lua/lazy/view/sections.lua +++ b/lua/lazy/view/sections.lua @@ -24,6 +24,9 @@ return { }, { filter = function(plugin) + if plugin._.working then + return true + end return has_task(plugin, function(task) return task:is_running() end) From 03419f3e5f7590194d599aa8a1a7a7841409d141 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 17 Oct 2023 16:52:32 +0200 Subject: [PATCH 364/815] fix(cmd): shedule error message instead of showing directly --- lua/lazy/core/handler/cmd.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/handler/cmd.lua b/lua/lazy/core/handler/cmd.lua index ef7a2bd..658c957 100644 --- a/lua/lazy/core/handler/cmd.lua +++ b/lua/lazy/core/handler/cmd.lua @@ -35,7 +35,10 @@ function M:_add(cmd) local info = vim.api.nvim_get_commands({})[cmd] or vim.api.nvim_buf_get_commands(0, {})[cmd] if not info then - return Util.error("Command `" .. cmd .. "` not found after loading " .. plugins) + vim.schedule(function() + Util.error("Command `" .. cmd .. "` not found after loading " .. plugins) + end) + return end command.nargs = info.nargs From c059eece0cdd681b2dd212946e3d48544cc079bf Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 17 Oct 2023 17:43:37 +0200 Subject: [PATCH 365/815] refactor: Handler.load => Handler.resolve --- lua/lazy/core/handler/init.lua | 4 ++-- tests/core/plugin_spec.lua | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/lazy/core/handler/init.lua b/lua/lazy/core/handler/init.lua index ba45de5..b7ce3e5 100644 --- a/lua/lazy/core/handler/init.lua +++ b/lua/lazy/core/handler/init.lua @@ -48,7 +48,7 @@ end function M.enable(plugin) if not plugin._.loaded then if not plugin._.handlers then - M.load(plugin) + M.resolve(plugin) end for type in pairs(plugin._.handlers or {}) do M.handlers[type]:add(plugin) @@ -98,7 +98,7 @@ function M:_values(values, plugin) end ---@param plugin LazyPlugin -function M.load(plugin) +function M.resolve(plugin) local Plugin = require("lazy.core.plugin") plugin._.handlers = {} for type, handler in pairs(M.handlers) do diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index ee5b007..51f6e03 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -241,7 +241,7 @@ describe("plugin spec opt", function() local spec = Plugin.Spec.new(test) assert(#spec.notifs == 0) assert(vim.tbl_count(spec.plugins) == 1) - Handler.load(spec.plugins.bar) + Handler.resolve(spec.plugins.bar) vim.print(spec.plugins.bar._.handlers) local events = vim.tbl_keys(spec.plugins.bar._.handlers.event or {}) assert(type(events) == "table") @@ -307,7 +307,7 @@ describe("plugin spec opt", function() local spec = Plugin.Spec.new(test) assert(#spec.notifs == 0) assert(vim.tbl_count(spec.plugins) == 1) - Handler.load(spec.plugins.bar) + Handler.resolve(spec.plugins.bar) local events = spec.plugins.bar._.handlers.event assert(type(events) == "table") assert(vim.tbl_count(events) == 2) From daab5fe2807c55867d5f7cfb6ef0944783361be2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 17 Oct 2023 17:44:14 +0200 Subject: [PATCH 366/815] fix(loader): dont autoload when lazy handlers have not been setup yet. Fixes #1132 --- lua/lazy/core/loader.lua | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index edf9ba7..7cbd6f8 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -16,6 +16,7 @@ M.init_done = false M.disabled_rtp_plugins = { packer_compiled = true } ---@type table M.did_ftdetect = {} +M.did_handlers = false function M.disable_rtp_plugin(plugin) M.disabled_rtp_plugins[plugin] = true @@ -56,6 +57,7 @@ function M.setup() -- setup handlers Util.track("handlers") Handler.setup() + M.did_handlers = true Util.track() end @@ -498,8 +500,11 @@ function M.auto_load(modname, modpath) local plugin = Plugin.find(modpath) if plugin and modpath:find(plugin.dir, 1, true) == 1 then plugin._.rtp_loaded = true - -- don't load if we're loading specs or if the plugin is already loaded - if not (Plugin.loading or plugin._.loaded) then + -- don't load if: + -- * handlers haven't been setup yet + -- * we're loading specs + -- * the plugin is already loaded + if M.did_handlers and not (Plugin.loading or plugin._.loaded) then if plugin.module == false then error("Plugin " .. plugin.name .. " is not loaded and is configured with module=false") end @@ -508,9 +513,7 @@ function M.auto_load(modname, modpath) error("You're trying to load `" .. plugin.name .. "` for which `cond==false`") end end - return true end - return false end ---@param modname string From 4c75c8eeb957a99aa44ce8e526c04340ab358c5e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 21:52:13 +0200 Subject: [PATCH 367/815] chore(main): release 10.14.6 (#1130) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 9 +++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cac2ce..7355141 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## [10.14.6](https://github.com/folke/lazy.nvim/compare/v10.14.5...v10.14.6) (2023-10-17) + + +### Bug Fixes + +* **cmd:** shedule error message instead of showing directly ([03419f3](https://github.com/folke/lazy.nvim/commit/03419f3e5f7590194d599aa8a1a7a7841409d141)) +* **loader:** dont autoload when lazy handlers have not been setup yet. Fixes [#1132](https://github.com/folke/lazy.nvim/issues/1132) ([daab5fe](https://github.com/folke/lazy.nvim/commit/daab5fe2807c55867d5f7cfb6ef0944783361be2)) +* **ui:** running tasks are now less twitchy ([7613ab2](https://github.com/folke/lazy.nvim/commit/7613ab2abb1bd99e039ae02030bc2c48b7626925)) + ## [10.14.5](https://github.com/folke/lazy.nvim/compare/v10.14.4...v10.14.5) (2023-10-17) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 7e970e4..7ba6851 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -176,7 +176,7 @@ M.defaults = { debug = false, } -M.version = "10.14.5" -- x-release-please-version +M.version = "10.14.6" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 71007c715f14b395546cc319005a6fba9e43c705 Mon Sep 17 00:00:00 2001 From: SandeshPyakurel <85491057+SandeshPyakurel@users.noreply.github.com> Date: Thu, 19 Oct 2023 23:58:25 +0545 Subject: [PATCH 368/815] docs: Typos fixed in CHANGELOG.md (#1140) --- CHANGELOG.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7355141..a09c1a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ ### Bug Fixes -* **cmd:** shedule error message instead of showing directly ([03419f3](https://github.com/folke/lazy.nvim/commit/03419f3e5f7590194d599aa8a1a7a7841409d141)) +* **cmd:** schedule error message instead of showing directly ([03419f3](https://github.com/folke/lazy.nvim/commit/03419f3e5f7590194d599aa8a1a7a7841409d141)) * **loader:** dont autoload when lazy handlers have not been setup yet. Fixes [#1132](https://github.com/folke/lazy.nvim/issues/1132) ([daab5fe](https://github.com/folke/lazy.nvim/commit/daab5fe2807c55867d5f7cfb6ef0944783361be2)) * **ui:** running tasks are now less twitchy ([7613ab2](https://github.com/folke/lazy.nvim/commit/7613ab2abb1bd99e039ae02030bc2c48b7626925)) @@ -133,7 +133,7 @@ ### Bug Fixes -* **manage:** prevend auto conversion 'CRLF' to 'LF' in update lazy-lock.json on Windows. Fixes [#1093](https://github.com/folke/lazy.nvim/issues/1093) ([#1094](https://github.com/folke/lazy.nvim/issues/1094)) ([5579d72](https://github.com/folke/lazy.nvim/commit/5579d72576b21b9c8c2d01838598aece5dc2be6d)) +* **manage:** prevent auto conversion 'CRLF' to 'LF' in update lazy-lock.json on Windows. Fixes [#1093](https://github.com/folke/lazy.nvim/issues/1093) ([#1094](https://github.com/folke/lazy.nvim/issues/1094)) ([5579d72](https://github.com/folke/lazy.nvim/commit/5579d72576b21b9c8c2d01838598aece5dc2be6d)) * **profiling:** ensure proper traces in case of require errors ([2782f81](https://github.com/folke/lazy.nvim/commit/2782f8125e793940f5bf942af1a1df0bbc989d11)) ## [10.9.0](https://github.com/folke/lazy.nvim/compare/v10.8.2...v10.9.0) (2023-10-09) @@ -459,7 +459,7 @@ ### Features -* **plugin:** added support for `weak` specs. They will not be included in the final spec if not specified somwhere else ([8564f6d](https://github.com/folke/lazy.nvim/commit/8564f6d22b78a4a0fba9811faa556159b6c90a49)) +* **plugin:** added support for `weak` specs. They will not be included in the final spec if not specified somewhere else ([8564f6d](https://github.com/folke/lazy.nvim/commit/8564f6d22b78a4a0fba9811faa556159b6c90a49)) ### Bug Fixes @@ -480,7 +480,7 @@ ### Bug Fixes -* **loader:** dont clear tasks when istalling missing plugins ([80c4dec](https://github.com/folke/lazy.nvim/commit/80c4decc3226551b433dfea5e459998a96f17822)) +* **loader:** dont clear tasks when installing missing plugins ([80c4dec](https://github.com/folke/lazy.nvim/commit/80c4decc3226551b433dfea5e459998a96f17822)) * **loader:** reset cache before installing plugins during startup. Fixes [#803](https://github.com/folke/lazy.nvim/issues/803) ([aecdaab](https://github.com/folke/lazy.nvim/commit/aecdaab6a6ce8c9fdf9f983d5f943c6cfb11bf61)) ## [9.16.0](https://github.com/folke/lazy.nvim/compare/v9.15.0...v9.16.0) (2023-05-13) @@ -758,7 +758,7 @@ ### Features * deactivate WIP ([57a3960](https://github.com/folke/lazy.nvim/commit/57a3960fafc210f240a07439d1adfaba09d6ff59)) -* use "wslview" instead of "xsl-open" if it exsits ([#509](https://github.com/folke/lazy.nvim/issues/509)) ([2451ea4](https://github.com/folke/lazy.nvim/commit/2451ea4e655bc60ef639ad284e69c6fca15da352)) +* use "wslview" instead of "xsl-open" if it exists ([#509](https://github.com/folke/lazy.nvim/issues/509)) ([2451ea4](https://github.com/folke/lazy.nvim/commit/2451ea4e655bc60ef639ad284e69c6fca15da352)) ### Bug Fixes @@ -1100,7 +1100,7 @@ ### Features * **git:** added support for packed-refs. Fixes [#260](https://github.com/folke/lazy.nvim/issues/260) ([865ff41](https://github.com/folke/lazy.nvim/commit/865ff414c70d20648000d1b9d754dba64dbf4a62)) -* **ui:** make brower configurable. Fixes [#248](https://github.com/folke/lazy.nvim/issues/248) ([679d85c](https://github.com/folke/lazy.nvim/commit/679d85c9ffb6bd49d27267b3a282eeb73e063cde)) +* **ui:** make browser configurable. Fixes [#248](https://github.com/folke/lazy.nvim/issues/248) ([679d85c](https://github.com/folke/lazy.nvim/commit/679d85c9ffb6bd49d27267b3a282eeb73e063cde)) * **ui:** show when plugin would be loaded for unloaded plugins. Fixes [#261](https://github.com/folke/lazy.nvim/issues/261) ([5575d2b](https://github.com/folke/lazy.nvim/commit/5575d2b2a9eb7e104d85f4f68754ef3734c7a4a1)) @@ -1167,7 +1167,7 @@ ### Bug Fixes -* **cache:** ad jit.verion to cache version string. Fixes [#225](https://github.com/folke/lazy.nvim/issues/225) ([e3ffcff](https://github.com/folke/lazy.nvim/commit/e3ffcff7cce1206a2e41b413b0923a3aafeb9306)) +* **cache:** ad jit.version to cache version string. Fixes [#225](https://github.com/folke/lazy.nvim/issues/225) ([e3ffcff](https://github.com/folke/lazy.nvim/commit/e3ffcff7cce1206a2e41b413b0923a3aafeb9306)) * **cache:** added support for top level lua linked directories. Fixes [#233](https://github.com/folke/lazy.nvim/issues/233) ([853d4d5](https://github.com/folke/lazy.nvim/commit/853d4d58381870a4804ee7d822d3331d3cc5924d)) * **cache:** always normalize modname separators ([8544c38](https://github.com/folke/lazy.nvim/commit/8544c389ab54dd21c562b2763829670c71266caa)) * **cache:** check package.loaded after auto-load and return existing module if present. Fixes [#224](https://github.com/folke/lazy.nvim/issues/224) ([044e28b](https://github.com/folke/lazy.nvim/commit/044e28bf8bb454335c63998ef6f21bc34b3e6124)) @@ -1187,7 +1187,7 @@ * **loader:** show proper error message when trying to load a plugin that is not installed. Fixes [#201](https://github.com/folke/lazy.nvim/issues/201). Fixes [#202](https://github.com/folke/lazy.nvim/issues/202) ([956164d](https://github.com/folke/lazy.nvim/commit/956164d27dc02b8d3c21c9ef7cc9028d854b0978)) * **loader:** temporary fix for Vimtex and others. See [#230](https://github.com/folke/lazy.nvim/issues/230) ([c7122d6](https://github.com/folke/lazy.nvim/commit/c7122d64cdf16766433588486adcee67571de6d0)) * **loader:** when `config=true`, pass `nil` to `setup()`. Fixes [#208](https://github.com/folke/lazy.nvim/issues/208) ([5f423b2](https://github.com/folke/lazy.nvim/commit/5f423b29c65f536a9c41a34a8328372baa444da5)) -* only show fired ft events in debug obvioulsy. Fixes [#232](https://github.com/folke/lazy.nvim/issues/232) ([c7c1295](https://github.com/folke/lazy.nvim/commit/c7c1295c3e429d4a95e36b5c5b2dfcbeca61f42d)) +* only show fired ft events in debug obviously. Fixes [#232](https://github.com/folke/lazy.nvim/issues/232) ([c7c1295](https://github.com/folke/lazy.nvim/commit/c7c1295c3e429d4a95e36b5c5b2dfcbeca61f42d)) * **rtp:** correct order of adding to rtp. Fixes [#226](https://github.com/folke/lazy.nvim/issues/226) ([4e3a973](https://github.com/folke/lazy.nvim/commit/4e3a973f85bd2393009d495ecfd6c058345309d4)) From 9788a19ec0b4036028e78aec702634b4b89d3470 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 19 Oct 2023 18:14:04 +0000 Subject: [PATCH 369/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 5474610..d92274b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 17 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 19 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 6b7b4c5b96b39806e3b8a02ade07bee468f57b58 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 22 Oct 2023 14:24:27 +0200 Subject: [PATCH 370/815] style: show full trace when debug=true --- lua/lazy/core/util.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 0b27797..77cb8f5 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -75,7 +75,7 @@ function M.pretty_trace(opts) if not info then break end - if info.what ~= "C" and not info.source:find("lazy.nvim") then + if info.what ~= "C" and (Config.options.debug or not info.source:find("lazy.nvim")) then local source = info.source:sub(2) if source:find(Config.options.root, 1, true) == 1 then source = source:sub(#Config.options.root + 1) From 42fb1e89adb8008a401848e131c5ecb985db52f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 22 Oct 2023 12:25:19 +0000 Subject: [PATCH 371/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index d92274b..3c1e435 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 19 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 22 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 4446fdb9af1b1c41560f6cc41452eee826a8bce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maria=20Jos=C3=A9=20Solano?= Date: Sun, 22 Oct 2023 22:52:54 -0700 Subject: [PATCH 372/815] feat(ui): check pinned packages that can't be updated (#1139) * style: fix filter types * feat: check outdated pinned plugins --- README.md | 1 + lua/lazy/core/config.lua | 1 + lua/lazy/manage/task/git.lua | 9 ++++++++- lua/lazy/types.lua | 1 + lua/lazy/view/sections.lua | 12 ++++++++---- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9fcf781..ebcca6a 100644 --- a/README.md +++ b/README.md @@ -409,6 +409,7 @@ return { concurrency = nil, ---@type number? set to 1 to check for updates very slowly notify = true, -- get a notification when new updates are found frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated }, change_detection = { -- automatically check for config file changes and reload the ui diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 7ba6851..3f1f269 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -119,6 +119,7 @@ M.defaults = { concurrency = nil, ---@type number? set to 1 to check for updates very slowly notify = true, -- get a notification when new updates are found frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated }, change_detection = { -- automatically check for config file changes and reload the ui diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 9913ea1..a1bfcf6 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -42,7 +42,14 @@ M.log = { error("no target commit found") end assert(target.commit, self.plugin.name .. " " .. target.branch) - if not Git.eq(info, target) then + if Git.eq(info, target) then + if Config.options.checker.check_pinned then + local last_commit = Git.get_commit(self.plugin.dir, target.branch, true) + if not Git.eq(info, { commit = last_commit }) then + self.plugin._.outdated = true + end + end + else self.plugin._.updates = { from = info, to = target } end table.insert(args, info.commit .. ".." .. target.commit) diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 222acbe..5085b14 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -14,6 +14,7 @@ ---@field is_local? boolean ---@field updates? {from:GitInfo, to:GitInfo} ---@field cloned? boolean +---@field outdated? boolean ---@field kind? LazyPluginKind ---@field dep? boolean True if this plugin is only in the spec as a dependency ---@field cond? boolean diff --git a/lua/lazy/view/sections.lua b/lua/lazy/view/sections.lua index 0c1f578..5dfb57e 100644 --- a/lua/lazy/view/sections.lua +++ b/lua/lazy/view/sections.lua @@ -50,14 +50,12 @@ return { title = "Breaking Changes", }, { - ---@param plugin LazyPlugin filter = function(plugin) return plugin._.updated and plugin._.updated.from ~= plugin._.updated.to end, title = "Updated", }, { - ---@param plugin LazyPlugin filter = function(plugin) return plugin._.cloned end, @@ -66,7 +64,7 @@ return { { ---@param plugin LazyPlugin filter = function(plugin) - return plugin._.updates + return plugin._.updates ~= nil end, title = "Updates", }, @@ -90,9 +88,15 @@ return { end, title = "Not Installed", }, + { + filter = function (plugin) + return plugin._.outdated + end, + title = "Outdated", + }, { filter = function(plugin) - return plugin._.loaded + return plugin._.loaded ~= nil end, title = "Loaded", }, From e42fccc3cda70266e0841c5126de2c23e8982800 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 23 Oct 2023 05:53:33 +0000 Subject: [PATCH 373/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 3c1e435..0462e83 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 22 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 23 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -512,6 +512,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* concurrency = nil, ---@type number? set to 1 to check for updates very slowly notify = true, -- get a notification when new updates are found frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated }, change_detection = { -- automatically check for config file changes and reload the ui From 312e424a084a43b8b786f786b884be60043c23dc Mon Sep 17 00:00:00 2001 From: Serhii Karvatskyi Date: Wed, 25 Oct 2023 21:00:50 +0300 Subject: [PATCH 374/815] fix(loader): when reloading, clear plugin properties cache (#1153) See #445 --- lua/lazy/core/loader.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 7cbd6f8..0dc9e9f 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -216,6 +216,9 @@ function M.deactivate(plugin) -- disable handlers Handler.disable(plugin) + -- clear plugin properties cache + plugin._.cache = nil + -- remove loaded lua modules Util.walkmods(plugin.dir .. "/lua", function(modname) package.loaded[modname] = nil From f82bac799cd9107b3538d30d3cd3b62a53c94025 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 25 Oct 2023 18:01:37 +0000 Subject: [PATCH 375/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 0462e83..a356eb1 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 23 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 25 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 16603c6917435d8446f7357cb61095138a417085 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:13:09 +0200 Subject: [PATCH 376/815] chore(main): release 10.15.0 (#1147) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a09c1a2..5692ca4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [10.15.0](https://github.com/folke/lazy.nvim/compare/v10.14.6...v10.15.0) (2023-10-25) + + +### Features + +* **ui:** check pinned packages that can't be updated ([#1139](https://github.com/folke/lazy.nvim/issues/1139)) ([4446fdb](https://github.com/folke/lazy.nvim/commit/4446fdb9af1b1c41560f6cc41452eee826a8bce0)) + + +### Bug Fixes + +* **loader:** when reloading, clear plugin properties cache ([#1153](https://github.com/folke/lazy.nvim/issues/1153)) ([312e424](https://github.com/folke/lazy.nvim/commit/312e424a084a43b8b786f786b884be60043c23dc)), closes [#445](https://github.com/folke/lazy.nvim/issues/445) + ## [10.14.6](https://github.com/folke/lazy.nvim/compare/v10.14.5...v10.14.6) (2023-10-17) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 3f1f269..2b18a24 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -177,7 +177,7 @@ M.defaults = { debug = false, } -M.version = "10.14.6" -- x-release-please-version +M.version = "10.15.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 314193af1d63181bff65e8b24db416e34c5fae86 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 4 Nov 2023 10:14:03 +0100 Subject: [PATCH 377/815] fix(build): allow build=false to skip building --- lua/lazy/manage/task/plugin.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index ea623ee..e058c50 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -30,6 +30,11 @@ M.build = { local builders = self.plugin.build + -- Skip if `build` is set to `false` + if builders == false then + return + end + local build_file = get_build_file(self.plugin) if build_file then if builders then From 32dead0376f83b96728f5c799df64d0f0a325254 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 Nov 2023 09:14:45 +0000 Subject: [PATCH 378/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index a356eb1..4c69064 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 October 25 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 November 04 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 3674036a59a6a4a65559343d606a92145a782533 Mon Sep 17 00:00:00 2001 From: Riley Bruins Date: Sat, 4 Nov 2023 03:05:02 -0700 Subject: [PATCH 379/815] fix(ui): properly highlight breaking change commit scope (#1160) --- lua/lazy/view/render.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index c79be62..7487056 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -475,7 +475,7 @@ function M:log(task) self:append(vim.trim(msg), dimmed and "LazyDimmed" or nil):highlight({ ["#%d+"] = "LazyCommitIssue", ["^%S+:"] = dimmed and "Bold" or "LazyCommitType", - ["^%S+(%(.*%)):"] = "LazyCommitScope", + ["^%S+(%(.*%))!?:"] = "LazyCommitScope", ["`.-`"] = "@text.literal.markdown_inline", ["%*.-%*"] = "Italic", ["%*%*.-%*%*"] = "Bold", From 96584866b9c5e998cbae300594d0ccfd0c464627 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 4 Nov 2023 11:12:07 +0100 Subject: [PATCH 380/815] chore(main): release 10.15.1 (#1166) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5692ca4..f953d5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [10.15.1](https://github.com/folke/lazy.nvim/compare/v10.15.0...v10.15.1) (2023-11-04) + + +### Bug Fixes + +* **build:** allow build=false to skip building ([314193a](https://github.com/folke/lazy.nvim/commit/314193af1d63181bff65e8b24db416e34c5fae86)) +* **ui:** properly highlight breaking change commit scope ([#1160](https://github.com/folke/lazy.nvim/issues/1160)) ([3674036](https://github.com/folke/lazy.nvim/commit/3674036a59a6a4a65559343d606a92145a782533)) + ## [10.15.0](https://github.com/folke/lazy.nvim/compare/v10.14.6...v10.15.0) (2023-10-25) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 2b18a24..1fbf3ef 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -177,7 +177,7 @@ M.defaults = { debug = false, } -M.version = "10.15.0" -- x-release-please-version +M.version = "10.15.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 47d4baafcc370f16c195fd718f37f8fb1e0aa9a1 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 19 Jan 2024 16:09:28 +0100 Subject: [PATCH 381/815] fix(fs): error when plugin directory to delete is not a valid directory --- lua/lazy/manage/task/fs.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/task/fs.lua b/lua/lazy/manage/task/fs.lua index 525997e..c753143 100644 --- a/lua/lazy/manage/task/fs.lua +++ b/lua/lazy/manage/task/fs.lua @@ -13,7 +13,7 @@ M.clean = { assert(dir:find(Config.options.root, 1, true) == 1, self.plugin.dir .. " should be under packpath!") local stat = vim.loop.fs_lstat(dir) - assert(stat.type == "directory", self.plugin.dir .. " should be a directory!") + assert(stat and stat.type == "directory", self.plugin.dir .. " should be a directory!") Util.walk(dir, function(path, _, type) if type == "directory" then From 747bb955c5bfb2dc5d51280132f00a56a53f9f6d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 19 Jan 2024 15:10:07 +0000 Subject: [PATCH 382/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 4c69064..9b9bc16 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2023 November 04 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 January 19 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 5757b551fc6066d836b9e45f70b41561ca619272 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 20 Jan 2024 14:11:32 +0100 Subject: [PATCH 383/815] fix(keys): allow global/local ft keymaps to exist at the same time. Fixes #1241 --- lua/lazy/core/handler/keys.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index e19d6e5..6ca2c50 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -41,6 +41,11 @@ function M.parse(value, mode) ret.mode = mode or "n" ret.id = vim.api.nvim_replace_termcodes(ret.lhs, true, true, true) + if ret.ft then + local ft = type(ret.ft) == "string" and { ret.ft } or ret.ft --[[@as string[] ]] + ret.id = ret.id .. " (" .. table.concat(ft, ", ") .. ")" + end + if ret.mode ~= "n" then ret.id = ret.id .. " (" .. ret.mode .. ")" end From 42694c4fda37b786670ed2edb7521833954b09ba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 20 Jan 2024 13:12:10 +0000 Subject: [PATCH 384/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 9b9bc16..1b1b744 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 January 19 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 January 20 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From a6f782adc1ace840a7e671c731daab7851cba6af Mon Sep 17 00:00:00 2001 From: atusy <30277794+atusy@users.noreply.github.com> Date: Sat, 20 Jan 2024 22:19:09 +0900 Subject: [PATCH 385/815] feat(plugin): dev.path can now be a function (#1157) 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, }, }) ``` --- README.md | 2 +- lua/lazy/core/config.lua | 6 ++++-- lua/lazy/core/plugin.lua | 15 ++++++++++----- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ebcca6a..18ade37 100644 --- a/README.md +++ b/README.md @@ -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"} diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 1fbf3ef..90c4206 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -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"} @@ -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) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index fc25f8d..64c93cd 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -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 From 3e0c0a05bdbec315d58c2f181f8dcec04ef6b24d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 20 Jan 2024 13:19:39 +0000 Subject: [PATCH 386/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 1b1b744..e65b6c8 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -423,7 +423,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* 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"} From 1b3df6c00797e1b12f7c16148261e9dd841a33dd Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 20 Jan 2024 14:49:47 +0100 Subject: [PATCH 387/815] fix(health): dont warn on submodules. Fixes #1174 --- lua/lazy/health.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 929092d..89feabe 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -131,6 +131,7 @@ M.valid = { "opts", "pin", "priority", + "submodules", "tag", "url", "version", From d0d410bc222a475202d9c2b55d1c5fbd12c26ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Kr=C3=B3l?= Date: Sat, 20 Jan 2024 15:05:26 +0100 Subject: [PATCH 388/815] fix(git): comment sign detection in get_config function (#1281) - Modify the condition in the get_config function to correctly ignore comments and blank lines. - Update the regular expression to exclude lines starting with '#' or ';'. - This change ensures that only valid key-value pairs are added to the configuration table. --- lua/lazy/manage/git.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/git.lua b/lua/lazy/manage/git.lua index 98c44b5..6b0ab58 100644 --- a/lua/lazy/manage/git.lua +++ b/lua/lazy/manage/git.lua @@ -217,7 +217,7 @@ function M.get_config(repo) current_section = section:gsub('%s+"', "."):gsub('"+%s*$', "") else -- Ignore comments and blank lines - if not line:match("^%s*#") and line:match("%S") then + if not line:match("^%s*[#;]") and line:match("%S") then local key, value = line:match("^%s*(%S+)%s*=%s*(.+)%s*$") ret[current_section .. "." .. key] = value end From 89e6840d8b921a545724153c2a667624ea7d495b Mon Sep 17 00:00:00 2001 From: Johnny Horvi Date: Sat, 20 Jan 2024 15:08:08 +0100 Subject: [PATCH 389/815] docs: fix typo (#1230) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 18ade37..148f0bd 100644 --- a/README.md +++ b/README.md @@ -654,7 +654,7 @@ In practice this means that step 10 of [Neovim Initialization](https://neovim.io 1. All the plugins' `init()` functions are executed 2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) 4. All `/after/plugin` files are sourced (this includes `/after` from plugins) Files from runtime directories are always sourced in alphabetical order. @@ -824,7 +824,7 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori If your plugin needs a build step, you can create a file `build.lua` or `build/init.lua` in the root of your repo. This file will be loaded when the plugin is installed or updated. -This makes it easier for users, so they no longer need to specify a `build` command. +This makes it easier for users, as they no longer need to specify a `build` command. ## 📦 Other Neovim Plugin Managers in Lua From 0b507680ee5bbc998fdc54a40119de964dbc96cc Mon Sep 17 00:00:00 2001 From: Tomasz Wysocki <121371814+tomaszwysocki@users.noreply.github.com> Date: Sat, 20 Jan 2024 15:08:38 +0100 Subject: [PATCH 390/815] docs: fix typo in README.md (#1226) Corrected a typo in Migration Guide section of the README file. Co-authored-by: Tomasz Wysocki --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 148f0bd..c404f63 100644 --- a/README.md +++ b/README.md @@ -738,8 +738,8 @@ Any other property will override the property from the parent spec. - `lock` ➡️ `pin` - `disable=true` ➡️ `enabled = false` - `tag='*'` ➡️ `version="*"` -- `after` ℹ️ **_not needed_** for most use-cases. Use `dependencies` otherwise. -- `wants` ℹ️ **_not needed_** for most use-cases. Use `dependencies` otherwise. +- `after` is **_not needed_** for most use-cases. Use `dependencies` otherwise. +- `wants` is **_not needed_** for most use-cases. Use `dependencies` otherwise. - `config` don't support string type, use `fun(LazyPlugin)` instead. - `module` is auto-loaded. No need to specify - `keys` spec is [different](#%EF%B8%8F-lazy-key-mappings) From 17d9c93943c692e084dbf203e47e7fa122386d0f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 20 Jan 2024 14:09:14 +0000 Subject: [PATCH 391/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index e65b6c8..2fec161 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -768,7 +768,7 @@ In practice this means that step 10 of |Neovim Initialization| is done by Lazy: 1. All the plugins’ `init()` functions are executed 2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in you rtp are sourced (excluding `/after`) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) 4. All `/after/plugin` files are sourced (this includes `/after` from plugins) Files from runtime directories are always sourced in alphabetical order. @@ -859,8 +859,8 @@ PACKER.NVIM ~ - `lock` `pin` - `disable=true` `enabled = false` - `tag='*'` `version="*"` -- `after` **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` **not needed** for most use-cases. Use `dependencies` otherwise. +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. - `config` don’t support string type, use `fun(LazyPlugin)` instead. - `module` is auto-loaded. No need to specify - `keys` spec is |lazy.nvim-different| @@ -979,7 +979,7 @@ If your plugin needs a build step, you can create a file `build.lua` or `build/init.lua` in the root of your repo. This file will be loaded when the plugin is installed or updated. -This makes it easier for users, so they no longer need to specify a `build` +This makes it easier for users, as they no longer need to specify a `build` command. From 7ded44ce2a442aa32b90488b8f1f9c8ca6899f3b Mon Sep 17 00:00:00 2001 From: star-szr <327943+star-szr@users.noreply.github.com> Date: Sun, 21 Jan 2024 04:50:23 -0500 Subject: [PATCH 392/815] feat(ui): add style to dimmed commits (#1210) --- lua/lazy/view/config.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/config.lua b/lua/lazy/view/config.lua index cf7df1c..ea8a066 100644 --- a/lua/lazy/view/config.lua +++ b/lua/lazy/view/config.lua @@ -24,7 +24,7 @@ function M.get_commands() return ret end -M.dimmed_commits = { "build", "ci", "chore", "doc", "test" } +M.dimmed_commits = { "build", "ci", "chore", "doc", "style", "test" } M.keys = { hover = "K", From ababf0dab5375befb4525ede3b16e8d2c6b65ad2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 21 Jan 2024 09:50:53 +0000 Subject: [PATCH 393/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 2fec161..6e16e3e 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 January 20 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 January 21 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From a9b9a4b3a2dcc1e81828cfd74bfb61193b014b67 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 21 Jan 2024 11:10:24 +0100 Subject: [PATCH 394/815] fix(keys): make sure we don't delete the global mapping when executing an ft keymap. See #1241 --- lua/lazy/core/handler/keys.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 6ca2c50..815fcbb 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -163,7 +163,11 @@ end -- mapping when needed ---@param keys LazyKeys function M:_del(keys) - pcall(vim.keymap.del, keys.mode, keys.lhs) + pcall(vim.keymap.del, keys.mode, keys.lhs, { + -- NOTE: for buffer-local mappings, we only delete the mapping for the current buffer + -- So the mapping could still exist in other buffers + buffer = keys.ft and true or nil, + }) -- make sure to create global mappings when needed -- buffer-local mappings are managed by lazy if not keys.ft then From d09084c4b1f5c58724152a4acad7c880117a95ea Mon Sep 17 00:00:00 2001 From: Emilia Simmons Date: Sun, 21 Jan 2024 05:40:46 -0500 Subject: [PATCH 395/815] fix(keys): fix abbreviation expansion on lazy load (#1219) --- lua/lazy/core/handler/keys.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 815fcbb..e2020d1 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -128,6 +128,9 @@ function M:_add(keys) self:_set(keys, buf) end + if keys.mode:sub(-1) == 'a' then + lhs = lhs .. '' + end local feed = vim.api.nvim_replace_termcodes("" .. lhs, true, true, true) -- insert instead of append the lhs vim.api.nvim_feedkeys(feed, "i", false) From 28126922c9b54e35a192ac415788f202c3944c9f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 21 Jan 2024 11:43:48 +0100 Subject: [PATCH 396/815] chore(main): release 10.16.0 (#1284) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 18 ++++++++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f953d5c..8232b8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## [10.16.0](https://github.com/folke/lazy.nvim/compare/v10.15.1...v10.16.0) (2024-01-21) + + +### Features + +* **plugin:** dev.path can now be a function ([#1157](https://github.com/folke/lazy.nvim/issues/1157)) ([a6f782a](https://github.com/folke/lazy.nvim/commit/a6f782adc1ace840a7e671c731daab7851cba6af)) +* **ui:** add style to dimmed commits ([#1210](https://github.com/folke/lazy.nvim/issues/1210)) ([7ded44c](https://github.com/folke/lazy.nvim/commit/7ded44ce2a442aa32b90488b8f1f9c8ca6899f3b)) + + +### Bug Fixes + +* **fs:** error when plugin directory to delete is not a valid directory ([47d4baa](https://github.com/folke/lazy.nvim/commit/47d4baafcc370f16c195fd718f37f8fb1e0aa9a1)) +* **git:** comment sign detection in get_config function ([#1281](https://github.com/folke/lazy.nvim/issues/1281)) ([d0d410b](https://github.com/folke/lazy.nvim/commit/d0d410bc222a475202d9c2b55d1c5fbd12c26ffe)) +* **health:** dont warn on submodules. Fixes [#1174](https://github.com/folke/lazy.nvim/issues/1174) ([1b3df6c](https://github.com/folke/lazy.nvim/commit/1b3df6c00797e1b12f7c16148261e9dd841a33dd)) +* **keys:** allow global/local ft keymaps to exist at the same time. Fixes [#1241](https://github.com/folke/lazy.nvim/issues/1241) ([5757b55](https://github.com/folke/lazy.nvim/commit/5757b551fc6066d836b9e45f70b41561ca619272)) +* **keys:** fix abbreviation expansion on lazy load ([#1219](https://github.com/folke/lazy.nvim/issues/1219)) ([d09084c](https://github.com/folke/lazy.nvim/commit/d09084c4b1f5c58724152a4acad7c880117a95ea)) +* **keys:** make sure we don't delete the global mapping when executing an ft keymap. See [#1241](https://github.com/folke/lazy.nvim/issues/1241) ([a9b9a4b](https://github.com/folke/lazy.nvim/commit/a9b9a4b3a2dcc1e81828cfd74bfb61193b014b67)) + ## [10.15.1](https://github.com/folke/lazy.nvim/compare/v10.15.0...v10.15.1) (2023-11-04) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 90c4206..e5f5f1a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -177,7 +177,7 @@ M.defaults = { debug = false, } -M.version = "10.15.1" -- x-release-please-version +M.version = "10.16.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 670a6fec7f9b03134849e308d87f4dc316875c46 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 23 Jan 2024 21:51:00 +0100 Subject: [PATCH 397/815] fix(manage): better support for using the default colorscheme during install. See #1277 --- lua/lazy/core/loader.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 0dc9e9f..2d011dc 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -67,6 +67,9 @@ function M.install_missing() for _, plugin in pairs(Config.plugins) do if not (plugin._.installed or Plugin.has_errors(plugin)) then for _, colorscheme in ipairs(Config.options.install.colorscheme) do + if colorscheme == "default" then + break + end M.colorscheme(colorscheme) if vim.g.colors_name or pcall(vim.cmd.colorscheme, colorscheme) then break From aedcd79811d491b60d0a6577a9c1701063c2a609 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 23 Jan 2024 20:51:51 +0000 Subject: [PATCH 398/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 6e16e3e..5138375 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 January 21 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 January 23 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 5aea4e7021287d7bcda6f31d7ad234580940be32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=8D=E7=94=9F=E8=8A=B1?= Date: Fri, 8 Mar 2024 01:27:50 +0900 Subject: [PATCH 399/815] fix(types): fix incorrect LuaLS types (#1339) --- lua/lazy/types.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 5085b14..5d1980a 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -69,7 +69,7 @@ ---@field event? string[]|string|LazyEventSpec[]|fun(self:LazyPlugin, event:string[]):string[] ---@field cmd? string[]|string|fun(self:LazyPlugin, cmd:string[]):string[] ---@field ft? string[]|string|fun(self:LazyPlugin, ft:string[]):string[] ----@field keys? string|string[]|LazyKeysSpec[]|fun(self:LazyPlugin, keys:string[]):(string|LazyKeys)[] +---@field keys? string|string[]|LazyKeysSpec[]|fun(self:LazyPlugin, keys:string[]):((string|LazyKeys)[]) ---@field module? false ---@class LazyPluginSpec: LazyPluginBase,LazyPluginSpecHandlers,LazyPluginHooks,LazyPluginRef From 5be95fe3b4f024337b54e38cb2562f29b4504d45 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 7 Mar 2024 16:28:22 +0000 Subject: [PATCH 400/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 5138375..2f30f42 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 January 23 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 07 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From c96fc24555e838a5d9ae6207c0e74919a8c603da Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 7 Mar 2024 17:30:37 +0100 Subject: [PATCH 401/815] style: format --- lua/lazy/core/handler/keys.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index e2020d1..382d732 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -128,8 +128,8 @@ function M:_add(keys) self:_set(keys, buf) end - if keys.mode:sub(-1) == 'a' then - lhs = lhs .. '' + if keys.mode:sub(-1) == "a" then + lhs = lhs .. "" end local feed = vim.api.nvim_replace_termcodes("" .. lhs, true, true, true) -- insert instead of append the lhs From 0694651fd37c3645e1683b4f392d4e38e7d2991b Mon Sep 17 00:00:00 2001 From: TheSast <27977196+TheSast@users.noreply.github.com> Date: Thu, 7 Mar 2024 16:32:07 +0000 Subject: [PATCH 402/815] feat(loader): warn when maplocalleader is changed after init (#1326) * feat(loader): warn when maplocalleader is changed after init * docs: default maplocalleader --------- Co-authored-by: Folke Lemaitre --- README.md | 3 ++- lua/lazy/core/config.lua | 4 ++++ lua/lazy/core/loader.lua | 1 + lua/lazy/manage/reloader.lua | 7 +++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c404f63..7231917 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ require("lazy").setup(plugins, opts) ```lua -- Example using a list of specs with the default options vim.g.mapleader = " " -- Make sure to set `mapleader` before lazy so your mappings are correct +vim.g.maplocalleader = "\\" -- Same for `maplocalleader` require("lazy").setup({ "folke/which-key.nvim", @@ -537,7 +538,7 @@ Any command can have a **bang** to make the command wait till it finished. For e if you want to sync lazy from the cmdline, you can use: ```shell -$ nvim --headless "+Lazy! sync" +qa +nvim --headless "+Lazy! sync" +qa ``` `opts` is a table with the following key-values: diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index e5f5f1a..6b64c9d 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -199,6 +199,9 @@ M.me = nil ---@type string M.mapleader = nil +---@type string +M.maplocalleader = nil + function M.headless() return #vim.api.nvim_list_uis() == 0 end @@ -245,6 +248,7 @@ function M.setup(opts) -- disable plugin loading since we do all of that ourselves vim.go.loadplugins = false M.mapleader = vim.g.mapleader + M.maplocalleader = vim.g.maplocalleader if M.headless() then require("lazy.view.commands").setup() diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 2d011dc..ac5f471 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -50,6 +50,7 @@ function M.setup() Util.track() end Config.mapleader = vim.g.mapleader + Config.maplocalleader = vim.g.maplocalleader -- report any warnings & errors Config.spec:report() diff --git a/lua/lazy/manage/reloader.lua b/lua/lazy/manage/reloader.lua index c48cc9f..e94f038 100644 --- a/lua/lazy/manage/reloader.lua +++ b/lua/lazy/manage/reloader.lua @@ -76,6 +76,13 @@ function M.check(start) Config.mapleader = vim.g.mapleader end + if Loader.init_done and Config.maplocalleader ~= vim.g.maplocalleader then + vim.schedule(function() + require("lazy.core.util").warn("You need to set `vim.g.maplocalleader` **BEFORE** loading lazy") + end) + Config.maplocalleader = vim.g.maplocalleader + end + if not (start or #changes == 0) then vim.schedule(function() if Config.options.change_detection.notify and not Config.headless() then From e1e8d2f0f6e1cc1df3430458453a817cbd287bed Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 7 Mar 2024 16:32:44 +0000 Subject: [PATCH 403/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 2f30f42..3e61949 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -90,6 +90,7 @@ Nextstep is to add **lazy.nvim** below the code added in the prior step in >lua -- Example using a list of specs with the default options vim.g.mapleader = " " -- Make sure to set `mapleader` before lazy so your mappings are correct + vim.g.maplocalleader = "\\" -- Same for `maplocalleader` require("lazy").setup({ "folke/which-key.nvim", @@ -653,7 +654,7 @@ Any command can have a **bang** to make the command wait till it finished. For example, if you want to sync lazy from the cmdline, you can use: >shell - $ nvim --headless "+Lazy! sync" +qa + nvim --headless "+Lazy! sync" +qa < `opts` is a table with the following key-values: From d5c58bb1937f8aee390f206e724ef23b0cc95eb3 Mon Sep 17 00:00:00 2001 From: Wayne Wu <11427457+wyw@users.noreply.github.com> Date: Fri, 8 Mar 2024 00:32:52 +0800 Subject: [PATCH 404/815] fix(ui): remove a single space character from home title (#1309) Align home pill title spacing with other pills --- lua/lazy/view/render.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 7487056..1d97dd3 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -124,7 +124,7 @@ function M:title() local title = " " .. mode.name:sub(1, 1):upper() .. mode.name:sub(2) .. " (" .. mode.key .. ") " if mode.name == "home" then if self.view.state.mode == "home" then - title = " lazy.nvim " .. Config.options.ui.icons.lazy + title = " lazy.nvim " .. Config.options.ui.icons.lazy else title = " lazy.nvim (H) " end From 298bed190e40b67bb1c20c4d5845c2c0c7da450f Mon Sep 17 00:00:00 2001 From: Riley Bruins Date: Thu, 7 Mar 2024 08:34:29 -0800 Subject: [PATCH 405/815] fix: update to new treesitter capture groups (#1294) --- README.md | 8 ++++---- doc/lazy.nvim.txt | 8 ++++---- lua/lazy/view/colors.lua | 8 ++++---- lua/lazy/view/render.lua | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 7231917..10fabe9 100644 --- a/README.md +++ b/README.md @@ -791,7 +791,7 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori | **LazyCommitScope** | **_Italic_** | conventional commit scope | | **LazyCommitType** | **_Title_** | conventional commit type | | **LazyDimmed** | **_Conceal_** | property | -| **LazyDir** | **_@text.reference_** | directory | +| **LazyDir** | **_@markup.link_** | directory | | **LazyH1** | **_IncSearch_** | home button | | **LazyH2** | **_Bold_** | titles | | **LazyLocal** | **_Constant_** | | @@ -806,14 +806,14 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori | **LazyReasonImport** | **_Identifier_** | | | **LazyReasonKeys** | **_Statement_** | | | **LazyReasonPlugin** | **_Special_** | | -| **LazyReasonRequire** | **_@parameter_** | | +| **LazyReasonRequire** | **_@variable.parameter_** | | | **LazyReasonRuntime** | **_@macro_** | | | **LazyReasonSource** | **_Character_** | | -| **LazyReasonStart** | **_@field_** | | +| **LazyReasonStart** | **_@variable.member_** | | | **LazySpecial** | **_@punctuation.special_** | | | **LazyTaskError** | **_ErrorMsg_** | task errors | | **LazyTaskOutput** | **_MsgArea_** | task output | -| **LazyUrl** | **_@text.reference_** | url | +| **LazyUrl** | **_@markup.link_** | url | | **LazyValue** | **_@string_** | value of a property | diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 3e61949..617bdc1 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -924,7 +924,7 @@ Click to see all highlight groups ~ LazyDimmed Conceal property - LazyDir _@text.reference_ directory + LazyDir _@markup.link_ directory LazyH1 IncSearch homebutton @@ -955,13 +955,13 @@ Click to see all highlight groups ~ LazyReasonPlugin Special - LazyReasonRequire _@parameter_ + LazyReasonRequire _@variable.parameter_ LazyReasonRuntime _@macro_ LazyReasonSource Character - LazyReasonStart _@field_ + LazyReasonStart _@variable.member_ LazySpecial _@punctuation.special_ @@ -969,7 +969,7 @@ Click to see all highlight groups ~ LazyTaskOutput MsgArea task output - LazyUrl _@text.reference_ url + LazyUrl _@markup.link_ url LazyValue _@string_ valueof a property --------------------------------------------------------------------------------- diff --git a/lua/lazy/view/colors.lua b/lua/lazy/view/colors.lua index cc00a3a..83269f9 100644 --- a/lua/lazy/view/colors.lua +++ b/lua/lazy/view/colors.lua @@ -21,18 +21,18 @@ M.colors = { ReasonPlugin = "Special", ReasonEvent = "Constant", ReasonKeys = "Statement", - ReasonStart = "@field", + ReasonStart = "@variable.member", ReasonSource = "Character", ReasonFt = "Character", ReasonCmd = "Operator", ReasonImport = "Identifier", - ReasonRequire = "@parameter", + ReasonRequire = "@variable.parameter", Button = "CursorLine", ButtonActive = "Visual", TaskOutput = "MsgArea", -- task output TaskError = "ErrorMsg", -- task errors - Dir = "@text.reference", -- directory - Url = "@text.reference", -- url + Dir = "@markup.link", -- directory + Url = "@markup.link", -- url } M.did_setup = false diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 1d97dd3..5d7e197 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -476,7 +476,7 @@ function M:log(task) ["#%d+"] = "LazyCommitIssue", ["^%S+:"] = dimmed and "Bold" or "LazyCommitType", ["^%S+(%(.*%))!?:"] = "LazyCommitScope", - ["`.-`"] = "@text.literal.markdown_inline", + ["`.-`"] = "@markup.raw.markdown_inline", ["%*.-%*"] = "Italic", ["%*%*.-%*%*"] = "Bold", }) @@ -582,7 +582,7 @@ function M:profile() self:append("Based on the actual CPU time of the Neovim process till "):append("UIEnter", "LazySpecial") self:append("."):nl() self:append("This is more accurate than ") - self:append("`nvim --startuptime`", "@text.literal.markdown_inline") + self:append("`nvim --startuptime`", "@markup.raw.markdown_inline") self:append(".") else self:append("An accurate startuptime based on the actual CPU time of the Neovim process is not available."):nl() From a5ac16955e09f285074287b53e833ab675d15eef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 7 Mar 2024 16:35:04 +0000 Subject: [PATCH 406/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 617bdc1..844aa6d 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -955,13 +955,13 @@ Click to see all highlight groups ~ LazyReasonPlugin Special - LazyReasonRequire _@variable.parameter_ + LazyReasonRequire _@variable.parameter_ LazyReasonRuntime _@macro_ LazyReasonSource Character - LazyReasonStart _@variable.member_ + LazyReasonStart _@variable.member_ LazySpecial _@punctuation.special_ From 83493db50a434a4c5c648faf41e2ead80f96e478 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 17:41:58 +0100 Subject: [PATCH 407/815] chore(main): release 10.17.0 (#1292) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 15 +++++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8232b8a..e766de1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [10.17.0](https://github.com/folke/lazy.nvim/compare/v10.16.0...v10.17.0) (2024-03-07) + + +### Features + +* **loader:** warn when maplocalleader is changed after init ([#1326](https://github.com/folke/lazy.nvim/issues/1326)) ([0694651](https://github.com/folke/lazy.nvim/commit/0694651fd37c3645e1683b4f392d4e38e7d2991b)) + + +### Bug Fixes + +* **manage:** better support for using the default colorscheme during install. See [#1277](https://github.com/folke/lazy.nvim/issues/1277) ([670a6fe](https://github.com/folke/lazy.nvim/commit/670a6fec7f9b03134849e308d87f4dc316875c46)) +* **types:** fix incorrect LuaLS types ([#1339](https://github.com/folke/lazy.nvim/issues/1339)) ([5aea4e7](https://github.com/folke/lazy.nvim/commit/5aea4e7021287d7bcda6f31d7ad234580940be32)) +* **ui:** remove a single space character from home title ([#1309](https://github.com/folke/lazy.nvim/issues/1309)) ([d5c58bb](https://github.com/folke/lazy.nvim/commit/d5c58bb1937f8aee390f206e724ef23b0cc95eb3)) +* update to new treesitter capture groups ([#1294](https://github.com/folke/lazy.nvim/issues/1294)) ([298bed1](https://github.com/folke/lazy.nvim/commit/298bed190e40b67bb1c20c4d5845c2c0c7da450f)) + ## [10.16.0](https://github.com/folke/lazy.nvim/compare/v10.15.1...v10.16.0) (2024-01-21) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 6b64c9d..60934a0 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -177,7 +177,7 @@ M.defaults = { debug = false, } -M.version = "10.16.0" -- x-release-please-version +M.version = "10.17.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 9e157df077d24654d0cdefe08158cd4f76e85fe8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 22 Mar 2024 08:58:36 +0100 Subject: [PATCH 408/815] feat: refactor all vim.loop -> vim.uv and add a shim when needed --- lua/lazy/core/cache.lua | 12 ++++++------ lua/lazy/core/config.lua | 2 +- lua/lazy/core/loader.lua | 4 ++-- lua/lazy/core/util.lua | 16 ++++++++-------- lua/lazy/health.lua | 4 ++-- lua/lazy/help.lua | 6 +++--- lua/lazy/init.lua | 12 +++++++----- lua/lazy/manage/process.lua | 2 +- lua/lazy/manage/reloader.lua | 4 ++-- lua/lazy/manage/runner.lua | 2 +- lua/lazy/manage/task/fs.lua | 8 ++++---- lua/lazy/manage/task/git.lua | 4 ++-- lua/lazy/manage/task/init.lua | 6 +++--- lua/lazy/stats.lua | 2 +- lua/lazy/util.lua | 4 ++-- tests/core/e2e_spec.lua | 4 ++-- tests/core/util_spec.lua | 4 ++-- tests/helpers.lua | 6 +++--- tests/init.lua | 2 +- 19 files changed, 53 insertions(+), 51 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index ea9f4d9..6588c1e 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -1,4 +1,4 @@ -local uv = vim.loop +local uv = vim.uv local M = {} @@ -51,7 +51,7 @@ end ---@private function Loader.normalize(path) if path:sub(1, 1) == "~" then - local home = vim.loop.os_homedir() or "~" + local home = vim.uv.os_homedir() or "~" if home:sub(-1) == "\\" or home:sub(-1) == "/" then home = home:sub(1, -2) end @@ -222,7 +222,7 @@ end --- Loads the given module path using the cache ---@param modpath string ---@param opts? {hash?: CacheHash, mode?: "b"|"t"|"bt", env?:table} (table|nil) Options for loading the module: ---- - hash: (table) the hash of the file to load if it is already known. (defaults to `vim.loop.fs_stat({modpath})`) +--- - hash: (table) the hash of the file to load if it is already known. (defaults to `vim.uv.fs_stat({modpath})`) --- - mode: (string) the mode to load the module with. "b"|"t"|"bt" (defaults to `nil`) --- - env: (table) the environment to load the module in. (defaults to `nil`) ---@see |luaL_loadfile()| @@ -442,9 +442,9 @@ function Loader.lsmod(path) if not Loader._indexed[path] then local start = uv.hrtime() Loader._indexed[path] = {} - local handle = vim.loop.fs_scandir(path .. "/lua") + local handle = vim.uv.fs_scandir(path .. "/lua") while handle do - local name, t = vim.loop.fs_scandir_next(handle) + local name, t = vim.uv.fs_scandir_next(handle) if not name then break end @@ -480,7 +480,7 @@ function M._profile_loaders() for l, loader in pairs(package.loaders) do local loc = debug.getinfo(loader, "Sn").source:sub(2) package.loaders[l] = function(modname) - local start = vim.loop.hrtime() + local start = vim.uv.hrtime() local ret = loader(modname) Loader.track("loader " .. l .. ": " .. loc, start) Loader.track("loader_all", start) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 60934a0..0e6b7ee 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -17,7 +17,7 @@ M.defaults = { -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - concurrency = jit.os:find("Windows") and (vim.loop.available_parallelism() * 2) or nil, ---@type number limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, ---@type number limit the maximum amount of concurrent tasks git = { -- defaults for the `Lazy log` command -- log = { "--since=3 days ago" }, -- show commits from the last 3 days diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index ac5f471..9cd5018 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -472,7 +472,7 @@ function M.add_to_rtp(plugin) table.insert(rtp, idx_dir or (#rtp + 1), plugin.dir) local after = plugin.dir .. "/after" - if vim.loop.fs_stat(after) then + if vim.uv.fs_stat(after) then table.insert(rtp, idx_after or (#rtp + 1), after) end @@ -495,7 +495,7 @@ function M.colorscheme(name) if not plugin._.loaded then for _, ext in ipairs({ "lua", "vim" }) do local path = plugin.dir .. "/colors/" .. name .. "." .. ext - if vim.loop.fs_stat(path) then + if vim.uv.fs_stat(path) then return M.load(plugin, { colorscheme = name }) end end diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 77cb8f5..e51e670 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -12,7 +12,7 @@ function M.track(data, time) if data then local entry = { data = data, - time = time or vim.loop.hrtime(), + time = time or vim.uv.hrtime(), } table.insert(M._profiles[#M._profiles], entry) @@ -23,7 +23,7 @@ function M.track(data, time) else ---@type LazyProfile local entry = table.remove(M._profiles) - entry.time = vim.loop.hrtime() - entry.time + entry.time = vim.uv.hrtime() - entry.time return entry end end @@ -54,7 +54,7 @@ end ---@return string function M.norm(path) if path:sub(1, 1) == "~" then - local home = vim.loop.os_homedir() + local home = vim.uv.os_homedir() if home:sub(-1) == "\\" or home:sub(-1) == "/" then home = home:sub(1, -2) end @@ -175,9 +175,9 @@ end ---@param path string ---@param fn fun(path: string, name:string, type:FileType):boolean? function M.ls(path, fn) - local handle = vim.loop.fs_scandir(path) + local handle = vim.uv.fs_scandir(path) while handle do - local name, t = vim.loop.fs_scandir_next(handle) + local name, t = vim.uv.fs_scandir_next(handle) if not name then break end @@ -187,7 +187,7 @@ function M.ls(path, fn) -- HACK: type is not always returned due to a bug in luv, -- so fecth it with fs_stat instead when needed. -- see https://github.com/folke/lazy.nvim/issues/306 - if fn(fname, name, t or vim.loop.fs_stat(fname).type) == false then + if fn(fname, name, t or vim.uv.fs_stat(fname).type) == false then break end end @@ -263,7 +263,7 @@ function M.lsmod(modname, fn) return end - if vim.loop.fs_stat(root .. ".lua") then + if vim.uv.fs_stat(root .. ".lua") then fn(modname, root .. ".lua") end @@ -272,7 +272,7 @@ function M.lsmod(modname, fn) fn(modname, path) elseif (type == "file" or type == "link") and name:sub(-4) == ".lua" then fn(modname .. "." .. name:sub(1, -5), path) - elseif type == "directory" and vim.loop.fs_stat(path .. "/init.lua") then + elseif type == "directory" and vim.uv.fs_stat(path .. "/init.lua") then fn(modname .. "." .. name, path .. "/init.lua") end end) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 89feabe..bcc546a 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -26,7 +26,7 @@ function M.check() local existing = false for _, site in pairs(sites) do for _, packs in ipairs(vim.fn.expand(site .. "/pack/*", false, true)) do - if not packs:find("[/\\]dist$") and vim.loop.fs_stat(packs) then + if not packs:find("[/\\]dist$") and vim.uv.fs_stat(packs) then existing = true warn("found existing packages at `" .. packs .. "`") end @@ -46,7 +46,7 @@ function M.check() end local packer_compiled = vim.fn.stdpath("config") .. "/plugin/packer_compiled.lua" - if vim.loop.fs_stat(packer_compiled) then + if vim.uv.fs_stat(packer_compiled) then error("please remove the file `" .. packer_compiled .. "`") else ok("packer_compiled.lua not found") diff --git a/lua/lazy/help.lua b/lua/lazy/help.lua index a33e808..aa7666e 100644 --- a/lua/lazy/help.lua +++ b/lua/lazy/help.lua @@ -4,7 +4,7 @@ local Util = require("lazy.util") local M = {} function M.index(plugin) - if Config.options.readme.skip_if_doc_exists and vim.loop.fs_stat(plugin.dir .. "/doc") then + if Config.options.readme.skip_if_doc_exists and vim.uv.fs_stat(plugin.dir .. "/doc") then return {} end @@ -17,7 +17,7 @@ function M.index(plugin) local tags = {} for _, file in ipairs(files) do file = Util.norm(file) - if vim.loop.fs_stat(file) then + if vim.uv.fs_stat(file) then local rel_file = file:sub(#plugin.dir + 1) local tag_filename = plugin.name .. vim.fn.fnamemodify(rel_file, ":h"):gsub("%W+", "-"):gsub("^%-$", "") local lines = vim.split(Util.read_file(file), "\n") @@ -50,7 +50,7 @@ function M.update() Util.ls(docs, function(path, name, type) if type == "file" and name:sub(-2) == "md" then - vim.loop.fs_unlink(path) + vim.uv.fs_unlink(path) end end) ---@type {file:string, tag:string, line:string}[] diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index 75ccfa2..3bfa8c8 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -2,6 +2,8 @@ local M = {} M._start = 0 +vim.uv = vim.uv or vim.uv + local function profile_require() local done = {} ---@type table local r = require @@ -35,7 +37,7 @@ function M.setup(spec, opts) opts.spec = spec end - M._start = M._start == 0 and vim.loop.hrtime() or M._start + M._start = M._start == 0 and vim.uv.hrtime() or M._start if vim.g.lazy_did_setup then return vim.notify( "Re-sourcing your config is not supported with lazy.nvim", @@ -53,7 +55,7 @@ function M.setup(spec, opts) if not (pcall(require, "ffi") and jit and jit.version) then return vim.notify("lazy.nvim requires Neovim built with LuaJIT", vim.log.levels.ERROR, { title = "lazy.nvim" }) end - local start = vim.loop.hrtime() + local start = vim.uv.hrtime() -- use the Neovim cache if available if vim.loader and vim.fn.has("nvim-0.9.1") == 1 then @@ -89,7 +91,7 @@ function M.setup(spec, opts) end Util.track({ plugin = "lazy.nvim" }) -- setup start - Util.track("module", vim.loop.hrtime() - start) + Util.track("module", vim.uv.hrtime() - start) -- load config Util.track("config") @@ -100,7 +102,7 @@ function M.setup(spec, opts) Loader.setup() -- correct time delta and loaded - local delta = vim.loop.hrtime() - start + local delta = vim.uv.hrtime() - start Util.track().time = delta -- end setup if Config.plugins["lazy.nvim"] then Config.plugins["lazy.nvim"]._.loaded = { time = delta, source = "init.lua" } @@ -120,7 +122,7 @@ end function M.bootstrap() local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not vim.loop.fs_stat(lazypath) then + if not vim.uv.fs_stat(lazypath) then vim.fn.system({ "git", "clone", diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index 1db3677..5bb2716 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -41,7 +41,7 @@ M.signals = { } ---@diagnostic disable-next-line: no-unknown -local uv = vim.loop +local uv = vim.uv ---@class ProcessOpts ---@field args string[] diff --git a/lua/lazy/manage/reloader.lua b/lua/lazy/manage/reloader.lua index e94f038..ef9305c 100644 --- a/lua/lazy/manage/reloader.lua +++ b/lua/lazy/manage/reloader.lua @@ -16,7 +16,7 @@ function M.enable() M.timer:stop() end if #Config.spec.modules > 0 then - M.timer = assert(vim.loop.new_timer()) + M.timer = assert(vim.uv.new_timer()) M.check(true) M.timer:start(2000, 2000, M.check) end @@ -44,7 +44,7 @@ function M.check(start) -- spec is a module local function check(_, modpath) checked[modpath] = true - local hash = vim.loop.fs_stat(modpath) + local hash = vim.uv.fs_stat(modpath) if hash then if M.files[modpath] then if not M.eq(M.files[modpath], hash) then diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 0ac0c15..7e3a39d 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -92,7 +92,7 @@ function Runner:start() end end - local check = vim.loop.new_check() + local check = vim.uv.new_check() check:start(function() if self:resume() then return diff --git a/lua/lazy/manage/task/fs.lua b/lua/lazy/manage/task/fs.lua index c753143..c99c8bf 100644 --- a/lua/lazy/manage/task/fs.lua +++ b/lua/lazy/manage/task/fs.lua @@ -12,17 +12,17 @@ M.clean = { local dir = self.plugin.dir:gsub("/+$", "") assert(dir:find(Config.options.root, 1, true) == 1, self.plugin.dir .. " should be under packpath!") - local stat = vim.loop.fs_lstat(dir) + local stat = vim.uv.fs_lstat(dir) assert(stat and stat.type == "directory", self.plugin.dir .. " should be a directory!") Util.walk(dir, function(path, _, type) if type == "directory" then - vim.loop.fs_rmdir(path) + vim.uv.fs_rmdir(path) else - vim.loop.fs_unlink(path) + vim.uv.fs_unlink(path) end end) - vim.loop.fs_rmdir(dir) + vim.uv.fs_rmdir(dir) self.plugin._.installed = false end, diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index a1bfcf6..c838f30 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -15,7 +15,7 @@ M.log = { if opts.updated and not (plugin._.updated and plugin._.updated.from ~= plugin._.updated.to) then return true end - local stat = vim.loop.fs_stat(plugin.dir .. "/.git") + local stat = vim.uv.fs_stat(plugin.dir .. "/.git") return not (stat and stat.type == "directory") end, ---@param opts {args?: string[], updated?:boolean, check?:boolean} @@ -106,7 +106,7 @@ M.clone = { self.plugin._.cloned = true self.plugin._.installed = true self.plugin._.dirty = true - vim.loop.fs_unlink(marker) + vim.uv.fs_unlink(marker) end end, }) diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index a68c7d7..2397cdf 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -65,7 +65,7 @@ function Task:start() self:start() end) end - self._started = vim.loop.hrtime() + self._started = vim.uv.hrtime() ---@type boolean, string|any local ok, err = pcall(self._task, self, self._opts) if not ok then @@ -81,7 +81,7 @@ function Task:_check() return end end - self._ended = vim.loop.hrtime() + self._ended = vim.uv.hrtime() if self._opts.on_done then self._opts.on_done(self) end @@ -97,7 +97,7 @@ function Task:time() return 0 end if not self:is_done() then - return (vim.loop.hrtime() - self._started) / 1e6 + return (vim.uv.hrtime() - self._started) / 1e6 end return (self._ended - self._started) / 1e6 end diff --git a/lua/lazy/stats.lua b/lua/lazy/stats.lua index a898ff7..c4f1ec2 100644 --- a/lua/lazy/stats.lua +++ b/lua/lazy/stats.lua @@ -54,7 +54,7 @@ function M.cputime() end local function fallback() - return (vim.loop.hrtime() - require("lazy")._start) / 1e6 + return (vim.uv.hrtime() - require("lazy")._start) / 1e6 end local ok, ret = pcall(real) diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index d841255..1c73d43 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -2,7 +2,7 @@ local M = setmetatable({}, { __index = require("lazy.core.util") }) function M.file_exists(file) - return vim.loop.fs_stat(file) ~= nil + return vim.uv.fs_stat(file) ~= nil end ---@param opts? LazyFloatOptions @@ -71,7 +71,7 @@ end ---@param fn F ---@return F function M.throttle(ms, fn) - local timer = vim.loop.new_timer() + local timer = vim.uv.new_timer() local running = false local first = true diff --git a/tests/core/e2e_spec.lua b/tests/core/e2e_spec.lua index a7d02fc..37cdca5 100644 --- a/tests/core/e2e_spec.lua +++ b/tests/core/e2e_spec.lua @@ -28,8 +28,8 @@ describe("lazy", function() "folke/paint.nvim", }, { install_missing = true, defaults = { lazy = true } }) assert(3 == vim.tbl_count(Config.plugins)) - assert(vim.loop.fs_stat(root .. "/paint.nvim/README.md")) - assert(vim.loop.fs_stat(root .. "/neodev.nvim/README.md")) + assert(vim.uv.fs_stat(root .. "/paint.nvim/README.md")) + assert(vim.uv.fs_stat(root .. "/neodev.nvim/README.md")) assert(not neodev) assert(Config.plugins["neodev.nvim"]._.installed) assert(not Config.plugins["neodev.nvim"]._.is_local) diff --git a/tests/core/util_spec.lua b/tests/core/util_spec.lua index 1d3592c..a497881 100644 --- a/tests/core/util_spec.lua +++ b/tests/core/util_spec.lua @@ -12,7 +12,7 @@ describe("util", function() end end Helpers.fs_rm("") - assert(not vim.loop.fs_stat(Helpers.path("")), "fs root should be deleted") + assert(not vim.uv.fs_stat(Helpers.path("")), "fs root should be deleted") end) it("lsmod lists all mods in dir", function() @@ -85,7 +85,7 @@ describe("util", function() assert.same(Helpers.path("old/lua/foobar"), root) Helpers.fs_rm("old") - assert(not vim.loop.fs_stat(Helpers.path("old/lua/foobar")), "old/lua/foobar should not exist") + assert(not vim.uv.fs_stat(Helpers.path("old/lua/foobar")), "old/lua/foobar should not exist") -- vim.opt.rtp = rtp vim.opt.rtp:append(Helpers.path("new")) diff --git a/tests/helpers.lua b/tests/helpers.lua index 48d84f9..b722a4a 100644 --- a/tests/helpers.lua +++ b/tests/helpers.lua @@ -26,12 +26,12 @@ function M.fs_rm(dir) dir = Util.norm(M.fs_root .. "/" .. dir) Util.walk(dir, function(path, _, type) if type == "directory" then - vim.loop.fs_rmdir(path) + vim.uv.fs_rmdir(path) else - vim.loop.fs_unlink(path) + vim.uv.fs_unlink(path) end end) - vim.loop.fs_rmdir(dir) + vim.uv.fs_rmdir(dir) end return M diff --git a/tests/init.lua b/tests/init.lua index a72b101..7b243c5 100644 --- a/tests/init.lua +++ b/tests/init.lua @@ -9,7 +9,7 @@ end function M.load(plugin) local name = plugin:match(".*/(.*)") local package_root = M.root(".tests/site/pack/deps/start/") - if not vim.loop.fs_stat(package_root .. name) then + if not vim.uv.fs_stat(package_root .. name) then print("Installing " .. plugin) vim.fn.mkdir(package_root, "p") vim.fn.system({ From 6705a0f11f3108ce499f933662602b08f99a6a65 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 22 Mar 2024 07:59:10 +0000 Subject: [PATCH 409/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 844aa6d..cf2c53b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 07 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 22 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From b2174810cdf18fab850cefd0a50788b19b2d8e94 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 09:01:10 +0100 Subject: [PATCH 410/815] chore(main): release 10.18.0 (#1369) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e766de1..36eaeff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.18.0](https://github.com/folke/lazy.nvim/compare/v10.17.0...v10.18.0) (2024-03-22) + + +### Features + +* refactor all vim.loop -> vim.uv and add a shim when needed ([9e157df](https://github.com/folke/lazy.nvim/commit/9e157df077d24654d0cdefe08158cd4f76e85fe8)) + ## [10.17.0](https://github.com/folke/lazy.nvim/compare/v10.16.0...v10.17.0) (2024-03-07) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 0e6b7ee..910280e 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -177,7 +177,7 @@ M.defaults = { debug = false, } -M.version = "10.17.0" -- x-release-please-version +M.version = "10.18.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 61dddaec58f8594e40e95a8d5069ce7e493089df Mon Sep 17 00:00:00 2001 From: Michael Braun Date: Fri, 22 Mar 2024 09:15:46 +0100 Subject: [PATCH 411/815] fix: uv shim was not falling back to vim.loop (#1370) --- lua/lazy/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index 3bfa8c8..91acd37 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -2,7 +2,7 @@ local M = {} M._start = 0 -vim.uv = vim.uv or vim.uv +vim.uv = vim.uv or vim.loop local function profile_require() local done = {} ---@type table From c76cc600304e07e8677173fcecb45aa866a5681c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 09:17:40 +0100 Subject: [PATCH 412/815] chore(main): release 10.18.1 (#1372) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36eaeff..8f1ac4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.18.1](https://github.com/folke/lazy.nvim/compare/v10.18.0...v10.18.1) (2024-03-22) + + +### Bug Fixes + +* uv shim was not falling back to vim.loop ([#1370](https://github.com/folke/lazy.nvim/issues/1370)) ([61dddae](https://github.com/folke/lazy.nvim/commit/61dddaec58f8594e40e95a8d5069ce7e493089df)) + ## [10.18.0](https://github.com/folke/lazy.nvim/compare/v10.17.0...v10.18.0) (2024-03-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 910280e..7c86d1e 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -177,7 +177,7 @@ M.defaults = { debug = false, } -M.version = "10.18.0" -- x-release-please-version +M.version = "10.18.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From b6f7ef856b36c5edbe9f03e3a8554b97c458c953 Mon Sep 17 00:00:00 2001 From: William Mathewson Date: Fri, 22 Mar 2024 08:18:36 +0000 Subject: [PATCH 413/815] fix(ui): Add "bot" to dimmed commands list (#1367) nvim-treesitter has added a bot to automate updating parsers. This feels similar to the other commands that are dimmed. --- lua/lazy/view/config.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/config.lua b/lua/lazy/view/config.lua index ea8a066..e834573 100644 --- a/lua/lazy/view/config.lua +++ b/lua/lazy/view/config.lua @@ -24,7 +24,7 @@ function M.get_commands() return ret end -M.dimmed_commits = { "build", "ci", "chore", "doc", "style", "test" } +M.dimmed_commits = { "bot", "build", "ci", "chore", "doc", "style", "test" } M.keys = { hover = "K", From 3132d7d27d56d6bb4bdd0a09623d162b3cf1c588 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 09:19:32 +0100 Subject: [PATCH 414/815] chore(main): release 10.18.2 (#1373) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f1ac4d..83c104f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.18.2](https://github.com/folke/lazy.nvim/compare/v10.18.1...v10.18.2) (2024-03-22) + + +### Bug Fixes + +* **ui:** Add "bot" to dimmed commands list ([#1367](https://github.com/folke/lazy.nvim/issues/1367)) ([b6f7ef8](https://github.com/folke/lazy.nvim/commit/b6f7ef856b36c5edbe9f03e3a8554b97c458c953)) + ## [10.18.1](https://github.com/folke/lazy.nvim/compare/v10.18.0...v10.18.1) (2024-03-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 7c86d1e..cce6519 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -177,7 +177,7 @@ M.defaults = { debug = false, } -M.version = "10.18.1" -- x-release-please-version +M.version = "10.18.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 9131ea4c4ae59e347716659088a76d9b9ce3b2f5 Mon Sep 17 00:00:00 2001 From: Riley Bruins Date: Fri, 22 Mar 2024 14:42:17 -0700 Subject: [PATCH 415/815] fix(cache): vim.loop fallback (#1375) --- lua/lazy/core/cache.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 6588c1e..07cb677 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -1,4 +1,4 @@ -local uv = vim.uv +local uv = vim.uv or vim.loop local M = {} @@ -51,7 +51,7 @@ end ---@private function Loader.normalize(path) if path:sub(1, 1) == "~" then - local home = vim.uv.os_homedir() or "~" + local home = uv.os_homedir() or "~" if home:sub(-1) == "\\" or home:sub(-1) == "/" then home = home:sub(1, -2) end @@ -442,9 +442,9 @@ function Loader.lsmod(path) if not Loader._indexed[path] then local start = uv.hrtime() Loader._indexed[path] = {} - local handle = vim.uv.fs_scandir(path .. "/lua") + local handle = uv.fs_scandir(path .. "/lua") while handle do - local name, t = vim.uv.fs_scandir_next(handle) + local name, t = uv.fs_scandir_next(handle) if not name then break end @@ -480,7 +480,7 @@ function M._profile_loaders() for l, loader in pairs(package.loaders) do local loc = debug.getinfo(loader, "Sn").source:sub(2) package.loaders[l] = function(modname) - local start = vim.uv.hrtime() + local start = uv.hrtime() local ret = loader(modname) Loader.track("loader " .. l .. ": " .. loc, start) Loader.track("loader_all", start) From 8134f2ac041a609f35ec8fc1a4cb4246292b0026 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 22:51:11 +0100 Subject: [PATCH 416/815] chore(main): release 10.18.3 (#1376) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83c104f..7a9a652 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.18.3](https://github.com/folke/lazy.nvim/compare/v10.18.2...v10.18.3) (2024-03-22) + + +### Bug Fixes + +* **cache:** vim.loop fallback ([#1375](https://github.com/folke/lazy.nvim/issues/1375)) ([9131ea4](https://github.com/folke/lazy.nvim/commit/9131ea4c4ae59e347716659088a76d9b9ce3b2f5)) + ## [10.18.2](https://github.com/folke/lazy.nvim/compare/v10.18.1...v10.18.2) (2024-03-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index cce6519..63994c9 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -177,7 +177,7 @@ M.defaults = { debug = false, } -M.version = "10.18.2" -- x-release-please-version +M.version = "10.18.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 66466a2594ab0c446193772a68c236c7e4e02ade Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 22 Mar 2024 23:35:19 +0100 Subject: [PATCH 417/815] feat(util): option to force system app for util.open --- lua/lazy/util.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 1c73d43..a3b94f6 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -19,13 +19,15 @@ function M.wo(win, k, v) end end -function M.open(uri) - if M.file_exists(uri) then +---@param opts? {system?:boolean} +function M.open(uri, opts) + opts = opts or {} + if not opts.system and M.file_exists(uri) then return M.float({ style = "", file = uri }) end local Config = require("lazy.core.config") local cmd - if Config.options.ui.browser then + if not opts.system and Config.options.ui.browser then cmd = { Config.options.ui.browser, uri } elseif vim.fn.has("win32") == 1 then cmd = { "explorer", uri } From af6afefbb46ab29a8a1db69536b04290a9403876 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 Mar 2024 23:39:43 +0100 Subject: [PATCH 418/815] chore(main): release 10.19.0 (#1377) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a9a652..d15874e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.19.0](https://github.com/folke/lazy.nvim/compare/v10.18.3...v10.19.0) (2024-03-22) + + +### Features + +* **util:** option to force system app for util.open ([66466a2](https://github.com/folke/lazy.nvim/commit/66466a2594ab0c446193772a68c236c7e4e02ade)) + ## [10.18.3](https://github.com/folke/lazy.nvim/compare/v10.18.2...v10.18.3) (2024-03-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 63994c9..dc05600 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -177,7 +177,7 @@ M.defaults = { debug = false, } -M.version = "10.18.3" -- x-release-please-version +M.version = "10.19.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From eade87fb837d6cdeef94587ce5e8c8dfb9f88920 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 24 Mar 2024 11:30:00 +0100 Subject: [PATCH 419/815] fix(types): fixed type for `version`. Fixes #1381 --- lua/lazy/types.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 5d1980a..9926aee 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -44,7 +44,7 @@ ---@field branch? string ---@field tag? string ---@field commit? string ----@field version? string +---@field version? string|boolean ---@field pin? boolean ---@field submodules? boolean Defaults to true From 08954f723bf2d442ea020551e3acc956f4dc6dc7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 24 Mar 2024 10:30:32 +0000 Subject: [PATCH 420/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index cf2c53b..69e26cc 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 22 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 24 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From a6b74f30d5aab79a40d932f449c0aa5d4a0c6934 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 26 Mar 2024 19:52:16 +0100 Subject: [PATCH 421/815] feat(ui): backdrop for the lazy floating window. Can be disabled with `opts.ui.backdrop` --- README.md | 117 ++++++++++++++++++++------------------- lua/lazy/core/config.lua | 5 +- lua/lazy/view/float.lua | 43 +++++++++++++- 3 files changed, 106 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 10fabe9..48f64ba 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ You can add the following Lua code to your `init.lua` to bootstrap **lazy.nvim** ```lua local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not vim.loop.fs_stat(lazypath) then +if not vim.uv.fs_stat(lazypath) then vim.fn.system({ "git", "clone", @@ -308,11 +308,12 @@ return { -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - concurrency = jit.os:find("Windows") and (vim.loop.available_parallelism() * 2) or nil, ---@type number limit the maximum amount of concurrent tasks + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, git = { -- defaults for the `Lazy log` command - -- log = { "-10" }, -- show the last 10 commits - log = { "-8" }, -- show commits from the last 3 days + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits timeout = 120, -- kill processes that take more than 2 minutes url_format = "https://github.com/%s.git", -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, @@ -339,6 +340,8 @@ return { wrap = true, -- wrap the lines in the ui -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, title = nil, ---@type string only works when border is not "none" title_pos = "center", ---@type "center" | "left" | "right" -- Show pills on top of the Lazy window @@ -346,7 +349,7 @@ return { icons = { cmd = " ", config = "", - event = "", + event = " ", ft = " ", init = " ", import = " ", @@ -358,7 +361,7 @@ return { runtime = " ", require = "󰢱 ", source = " ", - start = "", + start = " ", task = "✔ ", list = { "●", @@ -513,24 +516,24 @@ Any operation can be started from the UI, with a sub command or an API function: -| Command | Lua | Description | -| ------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -| `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | -| `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | -| `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | -| `:Lazy clear` | `require("lazy").clear()` | Clear finished tasks | -| `:Lazy debug` | `require("lazy").debug()` | Show debug information | -| `:Lazy health` | `require("lazy").health()` | Run `:checkhealth lazy` | -| `:Lazy help` | `require("lazy").help()` | Toggle this help page | -| `:Lazy home` | `require("lazy").home()` | Go back to plugin list | -| `:Lazy install [plugins]` | `require("lazy").install(opts?)` | Install missing plugins | -| `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | -| `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | -| `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | -| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | +| Command | Lua | Description | +| --- | --- | --- | --- | +| `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | +| `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | +| `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | +| `:Lazy clear` | `require("lazy").clear()` | Clear finished tasks | +| `:Lazy debug` | `require("lazy").debug()` | Show debug information | +| `:Lazy health` | `require("lazy").health()` | Run `:checkhealth lazy` | +| `:Lazy help` | `require("lazy").help()` | Toggle this help page | +| `:Lazy home` | `require("lazy").home()` | Go back to plugin list | +| `:Lazy install [plugins]` | `require("lazy").install(opts?)` | Install missing plugins | +| `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | +| `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | +| `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | +| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | | `:Lazy restore [plugins]` | `require("lazy").restore(opts?)` | Updates all plugins to the state in the lockfile. For a single plugin: restore it to the state in the lockfile or to a given commit under the cursor | -| `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | -| `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | +| `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | +| `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | @@ -781,40 +784,40 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori -| Highlight Group | Default Group | Description | -| --------------------- | -------------------------- | --------------------------------------------------- | -| **LazyButton** | **_CursorLine_** | | -| **LazyButtonActive** | **_Visual_** | | -| **LazyComment** | **_Comment_** | | -| **LazyCommit** | **_@variable.builtin_** | commit ref | -| **LazyCommitIssue** | **_Number_** | | -| **LazyCommitScope** | **_Italic_** | conventional commit scope | -| **LazyCommitType** | **_Title_** | conventional commit type | -| **LazyDimmed** | **_Conceal_** | property | -| **LazyDir** | **_@markup.link_** | directory | -| **LazyH1** | **_IncSearch_** | home button | -| **LazyH2** | **_Bold_** | titles | -| **LazyLocal** | **_Constant_** | | -| **LazyNoCond** | **_DiagnosticWarn_** | unloaded icon for a plugin where `cond()` was false | -| **LazyNormal** | **_NormalFloat_** | | -| **LazyProgressDone** | **_Constant_** | progress bar done | -| **LazyProgressTodo** | **_LineNr_** | progress bar todo | -| **LazyProp** | **_Conceal_** | property | -| **LazyReasonCmd** | **_Operator_** | | -| **LazyReasonEvent** | **_Constant_** | | -| **LazyReasonFt** | **_Character_** | | -| **LazyReasonImport** | **_Identifier_** | | -| **LazyReasonKeys** | **_Statement_** | | -| **LazyReasonPlugin** | **_Special_** | | -| **LazyReasonRequire** | **_@variable.parameter_** | | -| **LazyReasonRuntime** | **_@macro_** | | -| **LazyReasonSource** | **_Character_** | | -| **LazyReasonStart** | **_@variable.member_** | | -| **LazySpecial** | **_@punctuation.special_** | | -| **LazyTaskError** | **_ErrorMsg_** | task errors | -| **LazyTaskOutput** | **_MsgArea_** | task output | -| **LazyUrl** | **_@markup.link_** | url | -| **LazyValue** | **_@string_** | value of a property | +| Highlight Group | Default Group | Description | +| --- | --- | --- | +| **LazyButton** | ***CursorLine*** | | +| **LazyButtonActive** | ***Visual*** | | +| **LazyComment** | ***Comment*** | | +| **LazyCommit** | ***@variable.builtin*** | commit ref | +| **LazyCommitIssue** | ***Number*** | | +| **LazyCommitScope** | ***Italic*** | conventional commit scope | +| **LazyCommitType** | ***Title*** | conventional commit type | +| **LazyDimmed** | ***Conceal*** | property | +| **LazyDir** | ***@markup.link*** | directory | +| **LazyH1** | ***IncSearch*** | home button | +| **LazyH2** | ***Bold*** | titles | +| **LazyLocal** | ***Constant*** | | +| **LazyNoCond** | ***DiagnosticWarn*** | unloaded icon for a plugin where `cond()` was false | +| **LazyNormal** | ***NormalFloat*** | | +| **LazyProgressDone** | ***Constant*** | progress bar done | +| **LazyProgressTodo** | ***LineNr*** | progress bar todo | +| **LazyProp** | ***Conceal*** | property | +| **LazyReasonCmd** | ***Operator*** | | +| **LazyReasonEvent** | ***Constant*** | | +| **LazyReasonFt** | ***Character*** | | +| **LazyReasonImport** | ***Identifier*** | | +| **LazyReasonKeys** | ***Statement*** | | +| **LazyReasonPlugin** | ***Special*** | | +| **LazyReasonRequire** | ***@variable.parameter*** | | +| **LazyReasonRuntime** | ***@macro*** | | +| **LazyReasonSource** | ***Character*** | | +| **LazyReasonStart** | ***@variable.member*** | | +| **LazySpecial** | ***@punctuation.special*** | | +| **LazyTaskError** | ***ErrorMsg*** | task errors | +| **LazyTaskOutput** | ***MsgArea*** | task output | +| **LazyUrl** | ***@markup.link*** | url | +| **LazyValue** | ***@string*** | value of a property | diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index dc05600..4195336 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -17,7 +17,8 @@ M.defaults = { -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, ---@type number limit the maximum amount of concurrent tasks + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, git = { -- defaults for the `Lazy log` command -- log = { "--since=3 days ago" }, -- show commits from the last 3 days @@ -48,6 +49,8 @@ M.defaults = { wrap = true, -- wrap the lines in the ui -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, title = nil, ---@type string only works when border is not "none" title_pos = "center", ---@type "center" | "left" | "right" -- Show pills on top of the Lazy window diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 0a21b38..3e8938f 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -15,12 +15,15 @@ local ViewConfig = require("lazy.view.config") ---@field persistent? boolean ---@field ft? string ---@field noautocmd? boolean +---@field backdrop? float ---@class LazyFloat ---@field buf number ---@field win number ---@field opts LazyFloatOptions ---@field win_opts LazyWinOpts +---@field backdrop_buf number +---@field backdrop_win number ---@overload fun(opts?:LazyFloatOptions):LazyFloat local M = {} @@ -43,6 +46,7 @@ function M:init(opts) size = Config.options.ui.size, style = "minimal", border = Config.options.ui.border or "none", + backdrop = Config.options.ui.backdrop or 60, zindex = 50, }, opts or {}) @@ -62,7 +66,7 @@ function M:init(opts) } self:mount() self:on_key(ViewConfig.keys.close, self.close) - self:on({ "BufDelete", "BufHidden" }, self.close, { once = true }) + self:on({ "BufDelete", "BufHidden" }, self.close, { once = false }) return self end @@ -114,6 +118,24 @@ function M:mount() self.buf = vim.api.nvim_create_buf(false, true) end + if self.opts.backdrop and self.opts.backdrop < 100 then + self.backdrop_buf = vim.api.nvim_create_buf(false, true) + self.backdrop_win = vim.api.nvim_open_win(self.backdrop_buf, false, { + relative = "editor", + width = vim.o.columns, + height = vim.o.lines, + row = 0, + col = 0, + style = "minimal", + focusable = false, + zindex = self.opts.zindex - 1, + }) + vim.api.nvim_set_hl(0, "LazyBackdrop", { bg = "#000000", default = true }) + Util.wo(self.backdrop_win, "winhighlight", "Normal:LazyBackdrop") + Util.wo(self.backdrop_win, "winblend", self.opts.backdrop) + vim.bo[self.backdrop_buf].buftype = "nofile" + end + self:layout() self.win = vim.api.nvim_open_win(self.buf, true, self.win_opts) self:focus() @@ -149,6 +171,14 @@ function M:mount() end config.style = self.opts.style ~= "" and self.opts.style or nil vim.api.nvim_win_set_config(self.win, config) + + if self.backdrop_win and vim.api.nvim_win_is_valid(self.backdrop_win) then + vim.api.nvim_win_set_config(self.backdrop_win, { + width = vim.o.columns, + height = vim.o.lines, + }) + end + opts() vim.api.nvim_exec_autocmds("User", { pattern = "LazyFloatResized", modeline = false }) end, @@ -204,7 +234,18 @@ function M:close(opts) if wipe then self.buf = nil end + local backdrop_buf = self.backdrop_buf + local backdrop_win = self.backdrop_win + self.backdrop_buf = nil + self.backdrop_win = nil + vim.schedule(function() + if backdrop_win and vim.api.nvim_win_is_valid(backdrop_win) then + vim.api.nvim_win_close(backdrop_win, true) + end + if backdrop_buf and vim.api.nvim_buf_is_valid(backdrop_buf) then + vim.api.nvim_buf_delete(backdrop_buf, { force = true }) + end if win and vim.api.nvim_win_is_valid(win) then vim.api.nvim_win_close(win, true) end From 6749a259c140631e53282b93050e2ab8063db5eb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Mar 2024 18:52:53 +0000 Subject: [PATCH 422/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 160 ++++++++++++++++++++++++++-------------------- 1 file changed, 92 insertions(+), 68 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 69e26cc..fee5a68 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 24 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 26 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -62,7 +62,7 @@ You can add the following Lua code to your `init.lua` to bootstrap >lua local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not vim.loop.fs_stat(lazypath) then + if not vim.uv.fs_stat(lazypath) then vim.fn.system({ "git", "clone", @@ -411,11 +411,12 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - concurrency = jit.os:find("Windows") and (vim.loop.available_parallelism() * 2) or nil, ---@type number limit the maximum amount of concurrent tasks + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, git = { -- defaults for the `Lazy log` command - -- log = { "-10" }, -- show the last 10 commits - log = { "-8" }, -- show commits from the last 3 days + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits timeout = 120, -- kill processes that take more than 2 minutes url_format = "https://github.com/%s.git", -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, @@ -442,6 +443,8 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* wrap = true, -- wrap the lines in the ui -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, title = nil, ---@type string only works when border is not "none" title_pos = "center", ---@type "center" | "left" | "right" -- Show pills on top of the Lazy window @@ -449,7 +452,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* icons = { cmd = " ", config = "", - event = "", + event = " ", ft = " ", init = " ", import = " ", @@ -461,7 +464,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* runtime = " ", require = "󰢱 ", source = " ", - start = "", + start = " ", task = "✔ ", list = { "●", @@ -611,45 +614,63 @@ enabled with `config.checker.enabled = true`. Any operation can be started from the UI, with a sub command or an API function: - -------------------------------------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- --------------------------------------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + --------------------------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ---------------------- ----------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and show the log (git fetch) + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are no longer needed + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed - :Lazy clear require("lazy").clear() Clear finished tasks + :Lazy clear require("lazy").clear() Clear finished tasks - :Lazy debug require("lazy").debug() Show debug information + :Lazy debug require("lazy").debug() Show debug information - :Lazy health require("lazy").health() Run :checkhealth lazy + :Lazy health require("lazy").health() Run :checkhealth lazy - :Lazy help require("lazy").help() Toggle this help page + :Lazy help require("lazy").help() Toggle this help page - :Lazy home require("lazy").home() Go back to plugin list + :Lazy home require("lazy").home() Go back to plugin list - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + :Lazy install [plugins] require("lazy").install(opts?) Install missing + plugins - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has not been loaded yet. Similar - to :packadd. Like :Lazy load foo.nvim. Use - :Lazy! load to skip cond checks. + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to + skip cond checks. - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - :Lazy profile require("lazy").profile() Show detailed profiling + :Lazy profile require("lazy").profile() Show detailed + profiling - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin (experimental!!) + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to the state in the lockfile. - For a single plugin: restore it to the state in the - lockfile or to a given commit under the cursor + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the + cursor - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and update + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This will also update the lockfile - -------------------------------------------------------------------------------------------------------------- + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + --------------------------------------------------------------------------------------------------- Any command can have a **bang** to make the command wait till it finished. For example, if you want to sync lazy from the cmdline, you can use: @@ -905,74 +926,77 @@ HIGHLIGHT GROUPS *lazy.nvim-lazy.nvim-highlight-groups* Click to see all highlight groups ~ - --------------------------------------------------------------------------------- - Highlight Group Default Group Description - ------------------- ------------------------ ------------------------------------ - LazyButton CursorLine + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine - LazyButtonActive Visual + LazyButtonActive Visual - LazyComment Comment + LazyComment Comment - LazyCommit _@variable.builtin_ commitref + LazyCommit @variable.builtin commit ref - LazyCommitIssue Number + LazyCommitIssue Number - LazyCommitScope Italic conventional commit scope + LazyCommitScope Italic conventional commit + scope - LazyCommitType Title conventional commit type + LazyCommitType Title conventional commit + type - LazyDimmed Conceal property + LazyDimmed Conceal property - LazyDir _@markup.link_ directory + LazyDir @markup.link directory - LazyH1 IncSearch homebutton + LazyH1 IncSearch home button - LazyH2 Bold titles + LazyH2 Bold titles - LazyLocal Constant + LazyLocal Constant - LazyNoCond DiagnosticWarn unloaded icon for a plugin where - cond() was false + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false - LazyNormal NormalFloat + LazyNormal NormalFloat - LazyProgressDone Constant progress bar done + LazyProgressDone Constant progress bar done - LazyProgressTodo LineNr progress bar todo + LazyProgressTodo LineNr progress bar todo - LazyProp Conceal property + LazyProp Conceal property - LazyReasonCmd Operator + LazyReasonCmd Operator - LazyReasonEvent Constant + LazyReasonEvent Constant - LazyReasonFt Character + LazyReasonFt Character - LazyReasonImport Identifier + LazyReasonImport Identifier - LazyReasonKeys Statement + LazyReasonKeys Statement - LazyReasonPlugin Special + LazyReasonPlugin Special - LazyReasonRequire _@variable.parameter_ + LazyReasonRequire @variable.parameter - LazyReasonRuntime _@macro_ + LazyReasonRuntime @macro - LazyReasonSource Character + LazyReasonSource Character - LazyReasonStart _@variable.member_ + LazyReasonStart @variable.member - LazySpecial _@punctuation.special_ + LazySpecial @punctuation.special - LazyTaskError ErrorMsg taskerrors + LazyTaskError ErrorMsg task errors - LazyTaskOutput MsgArea task output + LazyTaskOutput MsgArea task output - LazyUrl _@markup.link_ url + LazyUrl @markup.link url - LazyValue _@string_ valueof a property - --------------------------------------------------------------------------------- + LazyValue @string value of a property + ----------------------------------------------------------------------- PLUGIN AUTHORS *lazy.nvim-lazy.nvim-plugin-authors* From 107719d31e2e4f4dccbabdbd7c7e662aebdb8399 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 19:54:49 +0100 Subject: [PATCH 423/815] chore(main): release 10.20.0 (#1382) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d15874e..a87bb1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [10.20.0](https://github.com/folke/lazy.nvim/compare/v10.19.0...v10.20.0) (2024-03-26) + + +### Features + +* **ui:** backdrop for the lazy floating window. Can be disabled with `opts.ui.backdrop` ([a6b74f3](https://github.com/folke/lazy.nvim/commit/a6b74f30d5aab79a40d932f449c0aa5d4a0c6934)) + + +### Bug Fixes + +* **types:** fixed type for `version`. Fixes [#1381](https://github.com/folke/lazy.nvim/issues/1381) ([eade87f](https://github.com/folke/lazy.nvim/commit/eade87fb837d6cdeef94587ce5e8c8dfb9f88920)) + ## [10.19.0](https://github.com/folke/lazy.nvim/compare/v10.18.3...v10.19.0) (2024-03-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4195336..335c93f 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -180,7 +180,7 @@ M.defaults = { debug = false, } -M.version = "10.19.0" -- x-release-please-version +M.version = "10.20.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 79e2e8593410f199b85f5d61a83704a16169282f Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 26 Mar 2024 20:30:12 +0100 Subject: [PATCH 424/815] fix(ui): properly cleanup on `:quit`. Fixes #1385 --- lua/lazy/view/float.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 3e8938f..808f09c 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -66,7 +66,7 @@ function M:init(opts) } self:mount() self:on_key(ViewConfig.keys.close, self.close) - self:on({ "BufDelete", "BufHidden" }, self.close, { once = false }) + self:on({ "WinLeave", "BufDelete", "BufHidden" }, self.close, { once = false }) return self end From 68941b7b13861ca44ad5d4caf7296d9160b4732f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 20:32:47 +0100 Subject: [PATCH 425/815] chore(main): release 10.20.1 (#1386) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a87bb1b..c6785ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.20.1](https://github.com/folke/lazy.nvim/compare/v10.20.0...v10.20.1) (2024-03-26) + + +### Bug Fixes + +* **ui:** properly cleanup on `:quit`. Fixes [#1385](https://github.com/folke/lazy.nvim/issues/1385) ([79e2e85](https://github.com/folke/lazy.nvim/commit/79e2e8593410f199b85f5d61a83704a16169282f)) + ## [10.20.0](https://github.com/folke/lazy.nvim/compare/v10.19.0...v10.20.0) (2024-03-26) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 335c93f..bfc57d3 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -180,7 +180,7 @@ M.defaults = { debug = false, } -M.version = "10.20.0" -- x-release-please-version +M.version = "10.20.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From d37a76b87137c777f3d778ed03729d7f332a85f0 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 26 Mar 2024 22:57:55 +0100 Subject: [PATCH 426/815] fix(ui): only enable backdrop when guicolors is set. Fixes #1387 --- lua/lazy/view/float.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 808f09c..d0cd6c7 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -118,7 +118,7 @@ function M:mount() self.buf = vim.api.nvim_create_buf(false, true) end - if self.opts.backdrop and self.opts.backdrop < 100 then + if self.opts.backdrop and self.opts.backdrop < 100 and vim.o.termguicolors then self.backdrop_buf = vim.api.nvim_create_buf(false, true) self.backdrop_win = vim.api.nvim_open_win(self.backdrop_buf, false, { relative = "editor", From eefb8974d6a092da6e1631855e4288499b651fdd Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 27 Mar 2024 08:48:55 +0100 Subject: [PATCH 427/815] fix(ui): special handling for floats closed before VimEnter. Seems that WinClosed events dont execute before that. Fixes #1390 --- lua/lazy/util.lua | 30 ++++++++++++++++++ lua/lazy/view/float.lua | 69 +++++++++++++++++++++++++++++------------ lua/lazy/view/init.lua | 16 +++++----- 3 files changed, 89 insertions(+), 26 deletions(-) diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index a3b94f6..705ca39 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -98,6 +98,36 @@ function M.throttle(ms, fn) end end +--- Creates a weak reference to an object. +--- Calling the returned function will return the object if it has not been garbage collected. +---@generic T: table +---@param obj T +---@return T|fun():T? +function M.weak(obj) + local weak = { _obj = obj } + ---@return table + local function get() + local ret = rawget(weak, "_obj") + return ret == nil and error("Object has been garbage collected", 2) or ret + end + local mt = { + __mode = "v", + __call = function(t) + return rawget(t, "_obj") + end, + __index = function(_, k) + return get()[k] + end, + __newindex = function(_, k, v) + get()[k] = v + end, + __pairs = function() + return pairs(get()) + end, + } + return setmetatable(weak, mt) +end + ---@class LazyCmdOptions: LazyFloatOptions ---@field cwd? string ---@field env? table diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index d0cd6c7..bfbc4eb 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -24,6 +24,7 @@ local ViewConfig = require("lazy.view.config") ---@field win_opts LazyWinOpts ---@field backdrop_buf number ---@field backdrop_win number +---@field id number ---@overload fun(opts?:LazyFloatOptions):LazyFloat local M = {} @@ -33,6 +34,12 @@ setmetatable(M, { end, }) +local _id = 0 +local function next_id() + _id = _id + 1 + return _id +end + ---@param opts? LazyFloatOptions function M.new(opts) local self = setmetatable({}, { __index = M }) @@ -42,6 +49,7 @@ end ---@param opts? LazyFloatOptions function M:init(opts) require("lazy.view.colors").setup() + self.id = next_id() self.opts = vim.tbl_deep_extend("force", { size = Config.options.ui.size, style = "minimal", @@ -65,8 +73,13 @@ function M:init(opts) title_pos = self.opts.title and self.opts.title_pos or nil, } self:mount() - self:on_key(ViewConfig.keys.close, self.close) - self:on({ "WinLeave", "BufDelete", "BufHidden" }, self.close, { once = false }) + self:on("VimEnter", function() + vim.schedule(function() + if not self:win_valid() then + self:close() + end + end) + end, { buffer = false }) return self end @@ -138,7 +151,13 @@ function M:mount() self:layout() self.win = vim.api.nvim_open_win(self.buf, true, self.win_opts) + self:on("WinClosed", function() + self:close() + self:augroup(true) + end, { win = true }) self:focus() + self:on_key(ViewConfig.keys.close, self.close) + self:on({ "BufDelete", "BufHidden" }, self.close) if vim.bo[self.buf].buftype == "" then vim.bo[self.buf].buftype = "nofile" @@ -185,27 +204,38 @@ function M:mount() }) end +---@param clear? boolean +function M:augroup(clear) + return vim.api.nvim_create_augroup("trouble.window." .. self.id, { clear = clear == true }) +end + ---@param events string|string[] ----@param fn fun(self?):boolean? ----@param opts? table +---@param fn fun(self:LazyFloat, event:{buf:number}):boolean? +---@param opts? vim.api.keyset.create_autocmd | {buffer: false, win?:boolean} function M:on(events, fn, opts) - if type(events) == "string" then - events = { events } + opts = opts or {} + if opts.win then + opts.pattern = self.win .. "" + opts.win = nil + elseif opts.buffer == nil then + opts.buffer = self.buf + elseif opts.buffer == false then + opts.buffer = nil end - for _, e in ipairs(events) do - local event, pattern = e:match("(%w+) (%w+)") - event = event or e - vim.api.nvim_create_autocmd( - event, - vim.tbl_extend("force", { - pattern = pattern, - buffer = (not pattern) and self.buf or nil, - callback = function() - return fn(self) - end, - }, opts or {}) - ) + if opts.pattern then + opts.buffer = nil end + local _self = Util.weak(self) + opts.callback = function(e) + local this = _self() + if not this then + -- delete the autocmd + return true + end + return fn(this, e) + end + opts.group = self:augroup() + vim.api.nvim_create_autocmd(events, opts) end ---@param key string @@ -223,6 +253,7 @@ end ---@param opts? {wipe:boolean} function M:close(opts) + self:augroup(true) local buf = self.buf local win = self.win local wipe = opts and opts.wipe diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index e62fc6e..5753f5b 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -53,7 +53,7 @@ function M.create() Float.init(self, { title = Config.options.ui.title, title_pos = Config.options.ui.title_pos, - noautocmd = true, + noautocmd = false, }) if Config.options.ui.wrap then @@ -69,12 +69,14 @@ function M.create() self.render = Render.new(self) self.update = Util.throttle(Config.options.ui.throttle, self.update) - self:on({ "User LazyRender", "User LazyFloatResized" }, function() - if not (self.buf and vim.api.nvim_buf_is_valid(self.buf)) then - return true - end - self:update() - end) + for _, pattern in ipairs({ "LazyRender", "LazyFloatResized" }) do + self:on({ "User" }, function() + if not (self.buf and vim.api.nvim_buf_is_valid(self.buf)) then + return true + end + self:update() + end, { pattern = pattern }) + end vim.keymap.set("n", ViewConfig.keys.abort, function() require("lazy.manage.process").abort() From b38b2257b643c4c35e3786f7c5e7512d9eb8f945 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Mar 2024 07:49:31 +0000 Subject: [PATCH 428/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index fee5a68..0c49864 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 26 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 27 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 65887ea871d44822bff47504202b3643f29d614e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 27 Mar 2024 08:55:21 +0100 Subject: [PATCH 429/815] chore(main): release 10.20.2 (#1388) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6785ab..b7adaba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [10.20.2](https://github.com/folke/lazy.nvim/compare/v10.20.1...v10.20.2) (2024-03-27) + + +### Bug Fixes + +* **ui:** only enable backdrop when guicolors is set. Fixes [#1387](https://github.com/folke/lazy.nvim/issues/1387) ([d37a76b](https://github.com/folke/lazy.nvim/commit/d37a76b87137c777f3d778ed03729d7f332a85f0)) +* **ui:** special handling for floats closed before VimEnter. Seems that WinClosed events dont execute before that. Fixes [#1390](https://github.com/folke/lazy.nvim/issues/1390) ([eefb897](https://github.com/folke/lazy.nvim/commit/eefb8974d6a092da6e1631855e4288499b651fdd)) + ## [10.20.1](https://github.com/folke/lazy.nvim/compare/v10.20.0...v10.20.1) (2024-03-26) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index bfc57d3..66ca5b2 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -180,7 +180,7 @@ M.defaults = { debug = false, } -M.version = "10.20.1" -- x-release-please-version +M.version = "10.20.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From a836600573fbcf1879b850d40b8cdea59b33f8da Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 27 Mar 2024 09:23:15 +0100 Subject: [PATCH 430/815] docs: make bootstrap work on stable and nightly. Fixes #1391 --- README.md | 2 +- lua/lazy/init.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 48f64ba..aeedef9 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ You can add the following Lua code to your `init.lua` to bootstrap **lazy.nvim** ```lua local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not vim.uv.fs_stat(lazypath) then +if not (vim.uv or vim.loop).fs_stat(lazypath) then vim.fn.system({ "git", "clone", diff --git a/lua/lazy/init.lua b/lua/lazy/init.lua index 91acd37..4336da1 100644 --- a/lua/lazy/init.lua +++ b/lua/lazy/init.lua @@ -122,7 +122,7 @@ end function M.bootstrap() local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not vim.uv.fs_stat(lazypath) then + if not (vim.uv or vim.loop).fs_stat(lazypath) then vim.fn.system({ "git", "clone", From e888d5b64c34bc41f7ef2e8850a5e67e4b3e2731 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Mar 2024 08:23:55 +0000 Subject: [PATCH 431/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 0c49864..c73b322 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -62,7 +62,7 @@ You can add the following Lua code to your `init.lua` to bootstrap >lua local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not vim.uv.fs_stat(lazypath) then + if not (vim.uv or vim.loop).fs_stat(lazypath) then vim.fn.system({ "git", "clone", From e753eb602539bdad9f0709066d5893a788cb5db9 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 27 Mar 2024 22:58:58 +0100 Subject: [PATCH 432/815] ci: better docgen --- lua/lazy/docs.lua | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lua/lazy/docs.lua b/lua/lazy/docs.lua index bf42e98..c38d047 100644 --- a/lua/lazy/docs.lua +++ b/lua/lazy/docs.lua @@ -109,9 +109,15 @@ function M.table(lines) return table.concat(ret, "\n") end +---@param opts? {name?:string, path?:string, modname?:string} ---@return ReadmeBlock -function M.colors() - local str = M.extract("lua/lazy/view/colors.lua", "\nM%.colors = ({.-\n})") +function M.colors(opts) + opts = vim.tbl_extend("force", { + name = "Lazy", + path = "lua/lazy/view/colors.lua", + modname = "lazy.view.colors", + }, opts or {}) + local str = M.extract(opts.path, "\nM%.colors = ({.-\n})") ---@type table local comments = {} for _, line in ipairs(vim.split(str, "\n")) do @@ -124,8 +130,8 @@ function M.colors() { "Highlight Group", "Default Group", "Description" }, { "---", "---", "---" }, } - Util.foreach(require("lazy.view.colors").colors, function(group, link) - lines[#lines + 1] = { "**Lazy" .. group .. "**", "***" .. link .. "***", comments[group] or "" } + Util.foreach(require(opts.modname).colors, function(group, link) + lines[#lines + 1] = { "**" .. opts.name .. group .. "**", "***" .. link .. "***", comments[group] or "" } end) return { content = M.table(lines) } end From f61ca6ec701a27e57f58da0315b741df09345f8f Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 28 Mar 2024 12:15:31 +0100 Subject: [PATCH 433/815] docs: fix commands table. Fixes #1393 --- README.md | 2 +- lua/lazy/docs.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aeedef9..f7f709f 100644 --- a/README.md +++ b/README.md @@ -517,7 +517,7 @@ Any operation can be started from the UI, with a sub command or an API function: | Command | Lua | Description | -| --- | --- | --- | --- | +| --- | --- | --- | | `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | | `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | | `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | diff --git a/lua/lazy/docs.lua b/lua/lazy/docs.lua index c38d047..36880a1 100644 --- a/lua/lazy/docs.lua +++ b/lua/lazy/docs.lua @@ -71,7 +71,7 @@ function M.commands() modes.load.opts = true local lines = { { "Command", "Lua", "Description" }, - { "---", "---", "---", "---" }, + { "---", "---", "---" }, } Util.foreach(modes, function(name, mode) if commands[name] then From ba58b87ed9c95da9d61e1b8b4da7bf7904e39986 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 28 Mar 2024 11:16:10 +0000 Subject: [PATCH 434/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 84 +++++++++++++++++++++++------------------------ 1 file changed, 41 insertions(+), 43 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c73b322..88476dc 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 27 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 28 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -20,6 +20,7 @@ Table of Contents *lazy.nvim-table-of-contents* - Highlight Groups |lazy.nvim-lazy.nvim-highlight-groups| - Plugin Authors |lazy.nvim-lazy.nvim-plugin-authors| - Other Neovim Plugin Managers in Lua|lazy.nvim-lazy.nvim-other-neovim-plugin-managers-in-lua| +2. Links |lazy.nvim-links| ============================================================================== 1. lazy.nvim *lazy.nvim-lazy.nvim* @@ -614,63 +615,60 @@ enabled with `config.checker.enabled = true`. Any operation can be started from the UI, with a sub command or an API function: - --------------------------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ---------------------- ----------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed - :Lazy clear require("lazy").clear() Clear finished tasks + :Lazy clear require("lazy").clear() Clear finished tasks - :Lazy debug require("lazy").debug() Show debug information + :Lazy debug require("lazy").debug() Show debug information - :Lazy health require("lazy").health() Run :checkhealth lazy + :Lazy health require("lazy").health() Run :checkhealth lazy - :Lazy help require("lazy").help() Toggle this help page + :Lazy help require("lazy").help() Toggle this help page - :Lazy home require("lazy").home() Go back to plugin list + :Lazy home require("lazy").home() Go back to plugin list - :Lazy install [plugins] require("lazy").install(opts?) Install missing - plugins + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to - skip cond checks. + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - :Lazy profile require("lazy").profile() Show detailed - profiling + :Lazy profile require("lazy").profile() Show detailed profiling - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the - cursor + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - --------------------------------------------------------------------------------------------------- + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- Any command can have a **bang** to make the command wait till it finished. For example, if you want to sync lazy from the cmdline, you can use: From 0ccf0312270d2d976ec551a9034bf05720f2486b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 28 Mar 2024 14:52:05 +0100 Subject: [PATCH 435/815] fix(ui): disable backdrop when Neovim is transparent --- lua/lazy/view/float.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index bfbc4eb..35baa6f 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -131,7 +131,10 @@ function M:mount() self.buf = vim.api.nvim_create_buf(false, true) end - if self.opts.backdrop and self.opts.backdrop < 100 and vim.o.termguicolors then + local normal = vim.api.nvim_get_hl(0, { name = "Normal" }) + local has_bg = normal and normal.bg ~= nil + + if has_bg and self.opts.backdrop and self.opts.backdrop < 100 and vim.o.termguicolors then self.backdrop_buf = vim.api.nvim_create_buf(false, true) self.backdrop_win = vim.api.nvim_open_win(self.backdrop_buf, false, { relative = "editor", From bef521ac89c8d423f9d092e37b58e8af0c099309 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 29 Mar 2024 08:18:38 +0100 Subject: [PATCH 436/815] chore(main): release 10.20.3 (#1394) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7adaba..82b9efa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.20.3](https://github.com/folke/lazy.nvim/compare/v10.20.2...v10.20.3) (2024-03-28) + + +### Bug Fixes + +* **ui:** disable backdrop when Neovim is transparent ([0ccf031](https://github.com/folke/lazy.nvim/commit/0ccf0312270d2d976ec551a9034bf05720f2486b)) + ## [10.20.2](https://github.com/folke/lazy.nvim/compare/v10.20.1...v10.20.2) (2024-03-27) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 66ca5b2..4c4c394 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -180,7 +180,7 @@ M.defaults = { debug = false, } -M.version = "10.20.2" -- x-release-please-version +M.version = "10.20.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 7a2617575a8c990394c0f28a8e980b33b72e1b0d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 29 Mar 2024 07:19:12 +0000 Subject: [PATCH 437/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 88476dc..30764b3 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 28 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 29 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 31ddbea7c10b6920c9077b66c97951ca8682d5c8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 29 Mar 2024 20:28:45 +0100 Subject: [PATCH 438/815] fix(ui): set backdrop filetype to `lazy_backdrop`. Fixes #1399 --- lua/lazy/view/float.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 35baa6f..6696c5e 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -150,6 +150,7 @@ function M:mount() Util.wo(self.backdrop_win, "winhighlight", "Normal:LazyBackdrop") Util.wo(self.backdrop_win, "winblend", self.opts.backdrop) vim.bo[self.backdrop_buf].buftype = "nofile" + vim.bo[self.backdrop_buf].filetype = "lazy_backdrop" end self:layout() From 481aed70cc4d8e8a38463fd16edf81a23c153247 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 22 Apr 2024 10:33:32 +0200 Subject: [PATCH 439/815] fix(heath): vim.uv. Fixes #1412 --- lua/lazy/health.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index bcc546a..7b06f1d 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -1,4 +1,5 @@ local Config = require("lazy.core.config") +local uv = vim.uv or vim.loop local M = {} @@ -26,7 +27,7 @@ function M.check() local existing = false for _, site in pairs(sites) do for _, packs in ipairs(vim.fn.expand(site .. "/pack/*", false, true)) do - if not packs:find("[/\\]dist$") and vim.uv.fs_stat(packs) then + if not packs:find("[/\\]dist$") and uv.fs_stat(packs) then existing = true warn("found existing packages at `" .. packs .. "`") end @@ -46,7 +47,7 @@ function M.check() end local packer_compiled = vim.fn.stdpath("config") .. "/plugin/packer_compiled.lua" - if vim.uv.fs_stat(packer_compiled) then + if uv.fs_stat(packer_compiled) then error("please remove the file `" .. packer_compiled .. "`") else ok("packer_compiled.lua not found") From 3f13f080434ac942b150679223d54f5ca91e0d52 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 22 Apr 2024 08:34:07 +0000 Subject: [PATCH 440/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 30764b3..4eed594 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 March 29 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 April 22 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 24234f47a21ca690de829ea1159b553a733f3968 Mon Sep 17 00:00:00 2001 From: Iordanis Petkakis <12776461+dpetka2001@users.noreply.github.com> Date: Sat, 4 May 2024 11:01:20 +0300 Subject: [PATCH 441/815] fix(ui): add conditional `nvim_get_hl_by_name` for Neovim 0.8.0 (#1429) --- lua/lazy/view/float.lua | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 6696c5e..0786193 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -131,8 +131,14 @@ function M:mount() self.buf = vim.api.nvim_create_buf(false, true) end - local normal = vim.api.nvim_get_hl(0, { name = "Normal" }) - local has_bg = normal and normal.bg ~= nil + local normal, has_bg + if vim.fn.has("nvim-0.9.0") == 0 then + normal = vim.api.nvim_get_hl_by_name("Normal", true) + has_bg = normal and normal.background ~= nil + else + normal = vim.api.nvim_get_hl(0, { name = "Normal" }) + has_bg = normal and normal.bg ~= nil + end if has_bg and self.opts.backdrop and self.opts.backdrop < 100 and vim.o.termguicolors then self.backdrop_buf = vim.api.nvim_create_buf(false, true) From d3974346b6cef2116c8e7b08423256a834cb7cbc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 May 2024 08:01:54 +0000 Subject: [PATCH 442/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 4eed594..3580d9f 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 April 22 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 04 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 40845063a2586b725d84d44e41fe2c8737751a30 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 12 May 2024 09:43:30 +0200 Subject: [PATCH 443/815] fix(ui): hover now opens repo url when no diff with main. Fixes #1430 --- lua/lazy/view/init.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 5753f5b..8674b8f 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -211,13 +211,13 @@ function M:restore(opts) end function M:hover() - if self:diff({ browser = true }) then + if self:diff({ browser = true, hover = true }) then return end self:open_url("") end ----@param opts? {commit?:string, browser:boolean} +---@param opts? {commit?:string, browser:boolean, hover:boolean} function M:diff(opts) opts = opts or {} local plugin = self.render:get_plugin() @@ -231,6 +231,9 @@ function M:diff(opts) local info = assert(Git.info(plugin.dir)) local target = assert(Git.get_target(plugin)) diff = { from = info.commit, to = target.commit } + if opts.hover and diff.from == diff.to then + return + end end if not diff then From 76d321008f513f6b54e18d136d17d564edf187ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 12 May 2024 07:44:06 +0000 Subject: [PATCH 444/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 3580d9f..0cb9fa3 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 04 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 12 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 2fcbcaf07ab79594f2ba25ebf6f4c47e250c33be Mon Sep 17 00:00:00 2001 From: Tristan Knight Date: Sun, 12 May 2024 08:50:06 +0100 Subject: [PATCH 445/815] fix(reload): strings in lua reload (#1439) --- lua/lazy/view/commands.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index a826827..1210917 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -56,6 +56,9 @@ M.commands = { end, reload = function(opts) for _, plugin in pairs(opts.plugins) do + if type(plugin) == "string" then + plugin = Config.plugins[plugin] + end Util.warn("Reloading **" .. plugin.name .. "**") require("lazy.core.loader").reload(plugin) end From bb0179139a5cd45779d667ae60e4e2fc8b0bed24 Mon Sep 17 00:00:00 2001 From: Markus Koller Date: Sun, 12 May 2024 09:52:21 +0200 Subject: [PATCH 446/815] docs: clarify default config implementation (#1407) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f7f709f..5465737 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ require("lazy").setup({ | **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | | **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | | **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | -| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)`. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | +| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)` if `opts` or `config = true` is set. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | | **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | | **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. 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. Some plugins provide their own `build.lua` which is automatically used by lazy. So no need to specify a build step for those plugins. | | **branch** | `string?` | Branch of the repository | From 16510304045bf977fbf09216ef865f4f50ec5c8b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 12 May 2024 07:52:52 +0000 Subject: [PATCH 447/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 0cb9fa3..40e7cf6 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -149,11 +149,11 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The default implementation will automatically run - require(MAIN).setup(opts). Lazy uses several - heuristics to determine the plugin’s MAIN module - automatically based on the plugin’s name. See also - opts. To use the default implementation without opts - set config to true. + require(MAIN).setup(opts) if opts or config = true + is set. Lazy uses several heuristics to determine + the plugin’s MAIN module automatically based on the + plugin’s name. See also opts. To use the default + implementation without opts set config to true. main string? You can specify the main module to use for config() and opts(), in case it can not be determined From 758bb5de98b805acc5eeed8cdc8ac7f0bc4b0b86 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 12 May 2024 10:15:14 +0200 Subject: [PATCH 448/815] chore(main): release 10.20.4 (#1400) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 11 +++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82b9efa..ec18539 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [10.20.4](https://github.com/folke/lazy.nvim/compare/v10.20.3...v10.20.4) (2024-05-12) + + +### Bug Fixes + +* **heath:** vim.uv. Fixes [#1412](https://github.com/folke/lazy.nvim/issues/1412) ([481aed7](https://github.com/folke/lazy.nvim/commit/481aed70cc4d8e8a38463fd16edf81a23c153247)) +* **reload:** strings in lua reload ([#1439](https://github.com/folke/lazy.nvim/issues/1439)) ([2fcbcaf](https://github.com/folke/lazy.nvim/commit/2fcbcaf07ab79594f2ba25ebf6f4c47e250c33be)) +* **ui:** add conditional `nvim_get_hl_by_name` for Neovim 0.8.0 ([#1429](https://github.com/folke/lazy.nvim/issues/1429)) ([24234f4](https://github.com/folke/lazy.nvim/commit/24234f47a21ca690de829ea1159b553a733f3968)) +* **ui:** hover now opens repo url when no diff with main. Fixes [#1430](https://github.com/folke/lazy.nvim/issues/1430) ([4084506](https://github.com/folke/lazy.nvim/commit/40845063a2586b725d84d44e41fe2c8737751a30)) +* **ui:** set backdrop filetype to `lazy_backdrop`. Fixes [#1399](https://github.com/folke/lazy.nvim/issues/1399) ([31ddbea](https://github.com/folke/lazy.nvim/commit/31ddbea7c10b6920c9077b66c97951ca8682d5c8)) + ## [10.20.3](https://github.com/folke/lazy.nvim/compare/v10.20.2...v10.20.3) (2024-03-28) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4c4c394..690e35a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -180,7 +180,7 @@ M.defaults = { debug = false, } -M.version = "10.20.3" -- x-release-please-version +M.version = "10.20.4" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From d2a4ce22dc02aa08c176cd7692b5b0ed74e4722b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 13 May 2024 08:34:33 +0200 Subject: [PATCH 449/815] fix(git): force `autocrlf=false`. Fixes #1055 --- lua/lazy/manage/task/git.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index c838f30..8dd2536 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -84,6 +84,12 @@ M.clone = { args[#args + 1] = "--origin=origin" + -- If git config --global core.autocrlf is true on a Unix/Linux system, then the git clone + -- process will lead to files with CRLF endings. Vi / vim / neovim cannot handle this. + -- Force git to clone with core.autocrlf=false. + args[#args + 1] = "-c" + args[#args + 1] = "core.autocrlf=false" + args[#args + 1] = "--progress" if self.plugin.branch then From e44636a43376e8a1e851958f7e9cbe996751d59f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 13 May 2024 06:35:16 +0000 Subject: [PATCH 450/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 40e7cf6..ba6387f 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 12 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 13 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From d039aecddb414c2df9d295e9182ed217196a2c1c Mon Sep 17 00:00:00 2001 From: Sebastian Lyng Johansen Date: Thu, 16 May 2024 21:44:51 +0200 Subject: [PATCH 451/815] fix: use vim.iter():flatten():totable() over vim.tbl_flatten (#1454) --- lua/lazy/help.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lua/lazy/help.lua b/lua/lazy/help.lua index aa7666e..a5fd741 100644 --- a/lua/lazy/help.lua +++ b/lua/lazy/help.lua @@ -9,9 +9,11 @@ function M.index(plugin) end ---@param file string - local files = vim.tbl_flatten(vim.tbl_map(function(file) + local tbl = vim.tbl_map(function(file) return vim.fn.expand(plugin.dir .. "/" .. file, false, true) - end, Config.options.readme.files)) + end, Config.options.readme.files) + + local files = vim.iter and vim.iter(tbl):flatten():totable() or vim.tbl_flatten(tbl) ---@type table local tags = {} From 05240b41548c4245a04d34ee54f789e824129991 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 16 May 2024 19:45:23 +0000 Subject: [PATCH 452/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index ba6387f..fcaa7e9 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 13 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 16 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 2e04a0c02c17facd3772c382099215acbe72535b Mon Sep 17 00:00:00 2001 From: Kevin Traver Date: Sat, 18 May 2024 02:14:12 -0600 Subject: [PATCH 453/815] fix(checker): ignore dev plugins (#1384) --- lua/lazy/manage/checker.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/checker.lua b/lua/lazy/manage/checker.lua index 803972e..8e03d9e 100644 --- a/lua/lazy/manage/checker.lua +++ b/lua/lazy/manage/checker.lua @@ -35,7 +35,7 @@ end function M.fast_check(opts) opts = opts or {} for _, plugin in pairs(Config.plugins) do - if not plugin.pin and plugin._.installed then + if not plugin.pin and not plugin.dev and plugin._.installed then plugin._.updates = nil local info = Git.info(plugin.dir) local ok, target = pcall(Git.get_target, plugin) From c717ab88ff47830845a1e422a1d6495c764fac1d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 18 May 2024 08:14:46 +0000 Subject: [PATCH 454/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index fcaa7e9..462627b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 16 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 18 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 5d29ffeaa0f2d91f1dfbc21943d19a11e59a6fc6 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 18 May 2024 13:23:53 +0200 Subject: [PATCH 455/815] style: favorite icon --- lua/lazy/core/config.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 690e35a..5aa61cb 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -59,6 +59,7 @@ M.defaults = { cmd = " ", config = "", event = " ", + favorite = " ", ft = " ", init = " ", import = " ", From 56a34a825b55e0e30cd9df0e055e428a13afd4aa Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 19 May 2024 17:29:43 +0200 Subject: [PATCH 456/815] fix(help): get rid of any tbl_flatten or iter flatten code --- lua/lazy/help.lua | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lua/lazy/help.lua b/lua/lazy/help.lua index a5fd741..46b47fd 100644 --- a/lua/lazy/help.lua +++ b/lua/lazy/help.lua @@ -8,12 +8,11 @@ function M.index(plugin) return {} end - ---@param file string - local tbl = vim.tbl_map(function(file) - return vim.fn.expand(plugin.dir .. "/" .. file, false, true) - end, Config.options.readme.files) + local files = {} - local files = vim.iter and vim.iter(tbl):flatten():totable() or vim.tbl_flatten(tbl) + for _, file in ipairs(Config.options.readme.files) do + vim.list_extend(files, vim.fn.expand(plugin.dir .. "/" .. file, false, true)) + end ---@type table local tags = {} From 0de782a6b0ffba599dbd332a4019d852564bf28c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 19 May 2024 15:30:17 +0000 Subject: [PATCH 457/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 462627b..5ef9203 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 18 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 19 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 39de11a2fa7f4b91556631c49a673bf3e48bcc16 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 20 May 2024 21:15:03 +0200 Subject: [PATCH 458/815] fix(keys): properly re-create buffer-local mappings. Fixes #1448 --- lua/lazy/core/handler/keys.lua | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 382d732..1d4ada3 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -123,11 +123,6 @@ function M:_add(keys) Util.track() end - -- Create the real buffer-local mapping - if keys.ft then - self:_set(keys, buf) - end - if keys.mode:sub(-1) == "a" then lhs = lhs .. "" end @@ -162,19 +157,21 @@ function M:_add(keys) end end --- Delete a mapping and create the real global +-- Delete a mapping and create the real global/buffer-local -- mapping when needed ---@param keys LazyKeys function M:_del(keys) - pcall(vim.keymap.del, keys.mode, keys.lhs, { - -- NOTE: for buffer-local mappings, we only delete the mapping for the current buffer - -- So the mapping could still exist in other buffers - buffer = keys.ft and true or nil, - }) - -- make sure to create global mappings when needed - -- buffer-local mappings are managed by lazy - if not keys.ft then - self:_set(keys) + -- bufs will be all buffers of the filetype for a buffer-local mapping + -- OR `false` for a global mapping + local bufs = keys.ft + and vim.tbl_filter(function(buf) + return vim.bo[buf].filetype == keys.ft + end, vim.api.nvim_list_bufs()) + or { false } + + for _, buf in ipairs(bufs) do + pcall(vim.keymap.del, keys.mode, keys.lhs, { buffer = buf or nil }) + self:_set(keys, buf or nil) end end From 9895337d1f4c0cea1186d92148e3d80f6551eda8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 20 May 2024 19:15:40 +0000 Subject: [PATCH 459/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 5ef9203..1bde778 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 19 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 20 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 82cf974e0939b3440c4470cbcd8e7869abfe480b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 21 May 2024 22:10:49 +0200 Subject: [PATCH 460/815] fix(keys): properly deal with ft list for keys. Fixes #1448 --- lua/lazy/core/handler/keys.lua | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 1d4ada3..bafc205 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -163,11 +163,14 @@ end function M:_del(keys) -- bufs will be all buffers of the filetype for a buffer-local mapping -- OR `false` for a global mapping - local bufs = keys.ft - and vim.tbl_filter(function(buf) - return vim.bo[buf].filetype == keys.ft - end, vim.api.nvim_list_bufs()) - or { false } + local bufs = { false } + + if keys.ft then + local ft = type(keys.ft) == "string" and { keys.ft } or keys.ft --[[@as string[] ]] + bufs = vim.tbl_filter(function(buf) + return vim.tbl_contains(ft, vim.bo[buf].filetype) + end, vim.api.nvim_list_bufs()) + end for _, buf in ipairs(bufs) do pcall(vim.keymap.del, keys.mode, keys.lhs, { buffer = buf or nil }) From 8411fe946775d126348089950eacbcc6a38306ec Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 21 May 2024 20:11:25 +0000 Subject: [PATCH 461/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 1bde778..a1b43c6 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 20 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 21 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 8f19915175395680808de529e4220da8dafc0759 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 00:10:58 +0200 Subject: [PATCH 462/815] chore(main): release 10.20.5 (#1445) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec18539..1b97a4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [10.20.5](https://github.com/folke/lazy.nvim/compare/v10.20.4...v10.20.5) (2024-05-21) + + +### Bug Fixes + +* **checker:** ignore dev plugins ([#1384](https://github.com/folke/lazy.nvim/issues/1384)) ([2e04a0c](https://github.com/folke/lazy.nvim/commit/2e04a0c02c17facd3772c382099215acbe72535b)) +* **git:** force `autocrlf=false`. Fixes [#1055](https://github.com/folke/lazy.nvim/issues/1055) ([d2a4ce2](https://github.com/folke/lazy.nvim/commit/d2a4ce22dc02aa08c176cd7692b5b0ed74e4722b)) +* **help:** get rid of any tbl_flatten or iter flatten code ([56a34a8](https://github.com/folke/lazy.nvim/commit/56a34a825b55e0e30cd9df0e055e428a13afd4aa)) +* **keys:** properly deal with ft list for keys. Fixes [#1448](https://github.com/folke/lazy.nvim/issues/1448) ([82cf974](https://github.com/folke/lazy.nvim/commit/82cf974e0939b3440c4470cbcd8e7869abfe480b)) +* **keys:** properly re-create buffer-local mappings. Fixes [#1448](https://github.com/folke/lazy.nvim/issues/1448) ([39de11a](https://github.com/folke/lazy.nvim/commit/39de11a2fa7f4b91556631c49a673bf3e48bcc16)) +* use vim.iter():flatten():totable() over vim.tbl_flatten ([#1454](https://github.com/folke/lazy.nvim/issues/1454)) ([d039aec](https://github.com/folke/lazy.nvim/commit/d039aecddb414c2df9d295e9182ed217196a2c1c)) + ## [10.20.4](https://github.com/folke/lazy.nvim/compare/v10.20.3...v10.20.4) (2024-05-12) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 5aa61cb..a964712 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -181,7 +181,7 @@ M.defaults = { debug = false, } -M.version = "10.20.4" -- x-release-please-version +M.version = "10.20.5" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 7667a73dee381c5fb7d538f6152aeb591e3f0372 Mon Sep 17 00:00:00 2001 From: Anshuman Medhi Date: Sun, 26 May 2024 16:40:08 +0800 Subject: [PATCH 463/815] feat: single-plugin keys in the lazy view in visual mode (#1476) Applies to all plugins contained in the range --- lua/lazy/view/float.lua | 5 +++-- lua/lazy/view/init.lua | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 0786193..d57b384 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -251,8 +251,9 @@ end ---@param key string ---@param fn fun(self?) ---@param desc? string -function M:on_key(key, fn, desc) - vim.keymap.set("n", key, function() +---@param mode? string[] +function M:on_key(key, fn, desc,mode) + vim.keymap.set(mode or "n", key, function() fn(self) end, { nowait = true, diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 8674b8f..2965bf3 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -297,11 +297,21 @@ function M:setup_modes() end if m.key_plugin and name ~= "restore" then self:on_key(m.key_plugin, function() - local plugin = self.render:get_plugin() - if plugin then - Commands.cmd(name, { plugins = { plugin } }) + vim.api.nvim_feedkeys(vim.keycode(""), "n", false) + local plugins = {} + if vim.api.nvim_get_mode().mode:lower() == "v" then + local f, t = vim.fn.line("."), vim.fn.line("v") + if f > t then f, t = t, f end + for i = f, t do + plugins[#plugins + 1] = self.render:get_plugin(i) + end + else + plugins[1] = self.render:get_plugin() end - end, m.desc_plugin) + if #plugins > 0 then + Commands.cmd(name, { plugins = plugins }) + end + end, m.desc_plugin, { "n", "x" }) end end end From 98210e2f82a0dc7e8469de882b6d2d8ab435a374 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 26 May 2024 08:40:48 +0000 Subject: [PATCH 464/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index a1b43c6..e661c05 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 21 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 26 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From ea7b9c3c3fd9026e1a5ae27950585df9a42ccd5b Mon Sep 17 00:00:00 2001 From: Christian Clason Date: Sun, 26 May 2024 15:21:58 +0200 Subject: [PATCH 465/815] fix(render): disable underline for diagnostics (#1478) Problem: On current Nvim nightlies, a regression in a `vim.highlight.range()` refactor makes underlines for diagnostics at end of line extend into the next line, leading to visual artifacts in the update view. Solution: Suppress underlines for diagnostics, as they are not wanted anyway. --- lua/lazy/view/render.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 5d7e197..a34456c 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -84,7 +84,7 @@ function M:update() diag.lnum = diag.row - 1 return diag end, self._diagnostics), - { signs = false, virtual_text = true } + { signs = false, virtual_text = true, underline = false } ) end From 9dde1f1bce44a8fd8cb885b5a8e8d47d8fd7b8c1 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 26 May 2024 16:43:52 +0200 Subject: [PATCH 466/815] feat: added support for local spec files `.lazy.lua` --- README.md | 105 ++++++++++++++++++++------------------- lua/lazy/core/config.lua | 1 + lua/lazy/core/plugin.lua | 42 +++++++++++++--- 3 files changed, 89 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 5465737..d3c1461 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ require("lazy").setup({ | **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | | **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | | **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | -| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)` if `opts` or `config = true` is set. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | +| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)` if `opts` or `config = true` is set. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | | **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | | **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. 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. Some plugins provide their own `build.lua` which is automatically used by lazy. So no need to specify a build step for those plugins. | | **branch** | `string?` | Branch of the repository | @@ -307,6 +307,7 @@ return { }, -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. ---@type number? limit the maximum amount of concurrent tasks concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, @@ -516,24 +517,24 @@ Any operation can be started from the UI, with a sub command or an API function: -| Command | Lua | Description | -| --- | --- | --- | -| `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | -| `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | -| `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | -| `:Lazy clear` | `require("lazy").clear()` | Clear finished tasks | -| `:Lazy debug` | `require("lazy").debug()` | Show debug information | -| `:Lazy health` | `require("lazy").health()` | Run `:checkhealth lazy` | -| `:Lazy help` | `require("lazy").help()` | Toggle this help page | -| `:Lazy home` | `require("lazy").home()` | Go back to plugin list | -| `:Lazy install [plugins]` | `require("lazy").install(opts?)` | Install missing plugins | -| `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | -| `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | -| `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | -| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | +| Command | Lua | Description | +| ------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | +| `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | +| `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | +| `:Lazy clear` | `require("lazy").clear()` | Clear finished tasks | +| `:Lazy debug` | `require("lazy").debug()` | Show debug information | +| `:Lazy health` | `require("lazy").health()` | Run `:checkhealth lazy` | +| `:Lazy help` | `require("lazy").help()` | Toggle this help page | +| `:Lazy home` | `require("lazy").home()` | Go back to plugin list | +| `:Lazy install [plugins]` | `require("lazy").install(opts?)` | Install missing plugins | +| `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | +| `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | +| `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | +| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | | `:Lazy restore [plugins]` | `require("lazy").restore(opts?)` | Updates all plugins to the state in the lockfile. For a single plugin: restore it to the state in the lockfile or to a given commit under the cursor | -| `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | -| `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | +| `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | +| `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | @@ -784,40 +785,40 @@ To uninstall **lazy.nvim**, you need to remove the following files and directori -| Highlight Group | Default Group | Description | -| --- | --- | --- | -| **LazyButton** | ***CursorLine*** | | -| **LazyButtonActive** | ***Visual*** | | -| **LazyComment** | ***Comment*** | | -| **LazyCommit** | ***@variable.builtin*** | commit ref | -| **LazyCommitIssue** | ***Number*** | | -| **LazyCommitScope** | ***Italic*** | conventional commit scope | -| **LazyCommitType** | ***Title*** | conventional commit type | -| **LazyDimmed** | ***Conceal*** | property | -| **LazyDir** | ***@markup.link*** | directory | -| **LazyH1** | ***IncSearch*** | home button | -| **LazyH2** | ***Bold*** | titles | -| **LazyLocal** | ***Constant*** | | -| **LazyNoCond** | ***DiagnosticWarn*** | unloaded icon for a plugin where `cond()` was false | -| **LazyNormal** | ***NormalFloat*** | | -| **LazyProgressDone** | ***Constant*** | progress bar done | -| **LazyProgressTodo** | ***LineNr*** | progress bar todo | -| **LazyProp** | ***Conceal*** | property | -| **LazyReasonCmd** | ***Operator*** | | -| **LazyReasonEvent** | ***Constant*** | | -| **LazyReasonFt** | ***Character*** | | -| **LazyReasonImport** | ***Identifier*** | | -| **LazyReasonKeys** | ***Statement*** | | -| **LazyReasonPlugin** | ***Special*** | | -| **LazyReasonRequire** | ***@variable.parameter*** | | -| **LazyReasonRuntime** | ***@macro*** | | -| **LazyReasonSource** | ***Character*** | | -| **LazyReasonStart** | ***@variable.member*** | | -| **LazySpecial** | ***@punctuation.special*** | | -| **LazyTaskError** | ***ErrorMsg*** | task errors | -| **LazyTaskOutput** | ***MsgArea*** | task output | -| **LazyUrl** | ***@markup.link*** | url | -| **LazyValue** | ***@string*** | value of a property | +| Highlight Group | Default Group | Description | +| --------------------- | -------------------------- | --------------------------------------------------- | +| **LazyButton** | **_CursorLine_** | | +| **LazyButtonActive** | **_Visual_** | | +| **LazyComment** | **_Comment_** | | +| **LazyCommit** | **_@variable.builtin_** | commit ref | +| **LazyCommitIssue** | **_Number_** | | +| **LazyCommitScope** | **_Italic_** | conventional commit scope | +| **LazyCommitType** | **_Title_** | conventional commit type | +| **LazyDimmed** | **_Conceal_** | property | +| **LazyDir** | **_@markup.link_** | directory | +| **LazyH1** | **_IncSearch_** | home button | +| **LazyH2** | **_Bold_** | titles | +| **LazyLocal** | **_Constant_** | | +| **LazyNoCond** | **_DiagnosticWarn_** | unloaded icon for a plugin where `cond()` was false | +| **LazyNormal** | **_NormalFloat_** | | +| **LazyProgressDone** | **_Constant_** | progress bar done | +| **LazyProgressTodo** | **_LineNr_** | progress bar todo | +| **LazyProp** | **_Conceal_** | property | +| **LazyReasonCmd** | **_Operator_** | | +| **LazyReasonEvent** | **_Constant_** | | +| **LazyReasonFt** | **_Character_** | | +| **LazyReasonImport** | **_Identifier_** | | +| **LazyReasonKeys** | **_Statement_** | | +| **LazyReasonPlugin** | **_Special_** | | +| **LazyReasonRequire** | **_@variable.parameter_** | | +| **LazyReasonRuntime** | **_@macro_** | | +| **LazyReasonSource** | **_Character_** | | +| **LazyReasonStart** | **_@variable.member_** | | +| **LazySpecial** | **_@punctuation.special_** | | +| **LazyTaskError** | **_ErrorMsg_** | task errors | +| **LazyTaskOutput** | **_MsgArea_** | task output | +| **LazyUrl** | **_@markup.link_** | url | +| **LazyValue** | **_@string_** | value of a property | diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index a964712..c95931c 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -16,6 +16,7 @@ M.defaults = { }, -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. ---@type number? limit the maximum amount of concurrent tasks concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 64c93cd..7bae395 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -1,5 +1,4 @@ local Config = require("lazy.core.config") -local Handler = require("lazy.core.handler") local Util = require("lazy.core.util") ---@class LazyCorePlugin @@ -20,6 +19,7 @@ local Spec = {} M.Spec = Spec M.last_fid = 0 M.fid_stack = {} ---@type number[] +M.LOCAL_SPEC = ".lazy.lua" ---@param spec? LazySpec ---@param opts? {optional?:boolean} @@ -399,10 +399,15 @@ function Spec:import(spec) ---@type string[] local modnames = {} - Util.lsmod(spec.import, function(modname) - modnames[#modnames + 1] = modname - end) - table.sort(modnames) + + if spec.import == M.LOCAL_SPEC then + modnames = { spec.import } + else + Util.lsmod(spec.import, function(modname) + modnames[#modnames + 1] = modname + end) + table.sort(modnames) + end for _, modname in ipairs(modnames) do imported = imported + 1 @@ -412,7 +417,12 @@ function Spec:import(spec) ---@diagnostic disable-next-line: no-unknown package.loaded[modname] = nil Util.try(function() - local mod = require(modname) + local mod = nil + if modname == M.LOCAL_SPEC then + mod = M.local_spec() + else + mod = require(modname) + end if type(mod) ~= "table" then self.importing = nil return self:error( @@ -533,12 +543,30 @@ function M.update_state() end end +function M.local_spec() + local filepath = vim.fn.fnamemodify(".lazy.lua", ":p") + local file = vim.secure.read(filepath) + if file then + return loadstring(file)() + end + return {} +end + function M.load() M.loading = true -- load specs Util.track("spec") Config.spec = Spec.new() - Config.spec:parse({ vim.deepcopy(Config.options.spec), { "folke/lazy.nvim" } }) + Config.spec:parse({ + vim.deepcopy(Config.options.spec), + { + import = ".lazy.lua", + cond = function() + return Config.options.local_spec and vim.fn.filereadable(M.LOCAL_SPEC) == 1 + end, + }, + { "folke/lazy.nvim" }, + }) -- override some lazy props local lazy = Config.spec.plugins["lazy.nvim"] From a55d275ecafedf47eb917c8848a1645bb3e5200e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 26 May 2024 14:44:42 +0000 Subject: [PATCH 467/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 121 ++++++++++++++++++++-------------------------- 1 file changed, 52 insertions(+), 69 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index e661c05..9cd480d 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -411,6 +411,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* }, -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. ---@type number? limit the maximum amount of concurrent tasks concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, @@ -615,17 +616,14 @@ enabled with `config.checker.enabled = true`. Any operation can be started from the UI, with a sub command or an API function: - ---------------------------------------------------------------------------------- + -------------------------------------------------------------------------------------------------------------- Command Lua Description - ------------------------- -------------------------------- ----------------------- + ------------------------- -------------------------------- --------------------------------------------------- :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and show the log (git fetch) - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are no longer needed :Lazy clear require("lazy").clear() Clear finished tasks @@ -639,36 +637,24 @@ function: :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has not been loaded yet. Similar + to :packadd. Like :Lazy load foo.nvim. Use + :Lazy! load to skip cond checks. :Lazy log [plugins] require("lazy").log(opts?) Show recent updates :Lazy profile require("lazy").profile() Show detailed profiling - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin (experimental!!) - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to the state in the lockfile. + For a single plugin: restore it to the state in the + lockfile or to a given commit under the cursor - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and update - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This will also update the lockfile + -------------------------------------------------------------------------------------------------------------- Any command can have a **bang** to make the command wait till it finished. For example, if you want to sync lazy from the cmdline, you can use: @@ -924,77 +910,74 @@ HIGHLIGHT GROUPS *lazy.nvim-lazy.nvim-highlight-groups* Click to see all highlight groups ~ - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine + --------------------------------------------------------------------------------- + Highlight Group Default Group Description + ------------------- ------------------------ ------------------------------------ + LazyButton CursorLine - LazyButtonActive Visual + LazyButtonActive Visual - LazyComment Comment + LazyComment Comment - LazyCommit @variable.builtin commit ref + LazyCommit _@variable.builtin_ commitref - LazyCommitIssue Number + LazyCommitIssue Number - LazyCommitScope Italic conventional commit - scope + LazyCommitScope Italic conventional commit scope - LazyCommitType Title conventional commit - type + LazyCommitType Title conventional commit type - LazyDimmed Conceal property + LazyDimmed Conceal property - LazyDir @markup.link directory + LazyDir _@markup.link_ directory - LazyH1 IncSearch home button + LazyH1 IncSearch homebutton - LazyH2 Bold titles + LazyH2 Bold titles - LazyLocal Constant + LazyLocal Constant - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false + LazyNoCond DiagnosticWarn unloaded icon for a plugin where + cond() was false - LazyNormal NormalFloat + LazyNormal NormalFloat - LazyProgressDone Constant progress bar done + LazyProgressDone Constant progress bar done - LazyProgressTodo LineNr progress bar todo + LazyProgressTodo LineNr progress bar todo - LazyProp Conceal property + LazyProp Conceal property - LazyReasonCmd Operator + LazyReasonCmd Operator - LazyReasonEvent Constant + LazyReasonEvent Constant - LazyReasonFt Character + LazyReasonFt Character - LazyReasonImport Identifier + LazyReasonImport Identifier - LazyReasonKeys Statement + LazyReasonKeys Statement - LazyReasonPlugin Special + LazyReasonPlugin Special - LazyReasonRequire @variable.parameter + LazyReasonRequire _@variable.parameter_ - LazyReasonRuntime @macro + LazyReasonRuntime _@macro_ - LazyReasonSource Character + LazyReasonSource Character - LazyReasonStart @variable.member + LazyReasonStart _@variable.member_ - LazySpecial @punctuation.special + LazySpecial _@punctuation.special_ - LazyTaskError ErrorMsg task errors + LazyTaskError ErrorMsg taskerrors - LazyTaskOutput MsgArea task output + LazyTaskOutput MsgArea task output - LazyUrl @markup.link url + LazyUrl _@markup.link_ url - LazyValue @string value of a property - ----------------------------------------------------------------------- + LazyValue _@string_ valueof a property + --------------------------------------------------------------------------------- PLUGIN AUTHORS *lazy.nvim-lazy.nvim-plugin-authors* From 24fa2a97085ca8a7220b5b078916f81e316036fd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 26 May 2024 16:59:48 +0200 Subject: [PATCH 468/815] chore(main): release 10.21.0 (#1477) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b97a4f..8474f5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [10.21.0](https://github.com/folke/lazy.nvim/compare/v10.20.5...v10.21.0) (2024-05-26) + + +### Features + +* added support for local spec files `.lazy.lua` ([9dde1f1](https://github.com/folke/lazy.nvim/commit/9dde1f1bce44a8fd8cb885b5a8e8d47d8fd7b8c1)) +* single-plugin keys in the lazy view in visual mode ([#1476](https://github.com/folke/lazy.nvim/issues/1476)) ([7667a73](https://github.com/folke/lazy.nvim/commit/7667a73dee381c5fb7d538f6152aeb591e3f0372)) + + +### Bug Fixes + +* **render:** disable underline for diagnostics ([#1478](https://github.com/folke/lazy.nvim/issues/1478)) ([ea7b9c3](https://github.com/folke/lazy.nvim/commit/ea7b9c3c3fd9026e1a5ae27950585df9a42ccd5b)) + ## [10.20.5](https://github.com/folke/lazy.nvim/compare/v10.20.4...v10.20.5) (2024-05-21) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index c95931c..b3efdfa 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -182,7 +182,7 @@ M.defaults = { debug = false, } -M.version = "10.20.5" -- x-release-please-version +M.version = "10.21.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 917dfbe2a9b606443639d1e809f2e4561a6dd654 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 31 May 2024 13:55:54 +0200 Subject: [PATCH 469/815] fix(view): backward compat for older Neovim versions. Fixes #1489 --- lua/lazy/view/init.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 2965bf3..eb853b5 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -297,11 +297,14 @@ function M:setup_modes() end if m.key_plugin and name ~= "restore" then self:on_key(m.key_plugin, function() - vim.api.nvim_feedkeys(vim.keycode(""), "n", false) + local esc = vim.api.nvim_replace_termcodes("", true, true, true) + vim.api.nvim_feedkeys(esc, "n", false) local plugins = {} if vim.api.nvim_get_mode().mode:lower() == "v" then local f, t = vim.fn.line("."), vim.fn.line("v") - if f > t then f, t = t, f end + if f > t then + f, t = t, f + end for i = f, t do plugins[#plugins + 1] = self.render:get_plugin(i) end From 52244a0c1d620c400d382b0a433969c5624d82f0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 31 May 2024 11:56:30 +0000 Subject: [PATCH 470/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 9cd480d..19a09cd 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 26 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 31 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 4a8f813d8134b7c3e2c70b9ea4407f613e85bd97 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 14:14:25 +0200 Subject: [PATCH 471/815] chore(main): release 10.21.1 (#1490) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8474f5c..15f52e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.21.1](https://github.com/folke/lazy.nvim/compare/v10.21.0...v10.21.1) (2024-05-31) + + +### Bug Fixes + +* **view:** backward compat for older Neovim versions. Fixes [#1489](https://github.com/folke/lazy.nvim/issues/1489) ([917dfbe](https://github.com/folke/lazy.nvim/commit/917dfbe2a9b606443639d1e809f2e4561a6dd654)) + ## [10.21.0](https://github.com/folke/lazy.nvim/compare/v10.20.5...v10.21.0) (2024-05-26) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index b3efdfa..f2d38b6 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -182,7 +182,7 @@ M.defaults = { debug = false, } -M.version = "10.21.0" -- x-release-please-version +M.version = "10.21.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From b77aaa08cb5b178ed8662765caa41c70ff254a4c Mon Sep 17 00:00:00 2001 From: Anshuman Medhi Date: Fri, 31 May 2024 22:28:33 +0800 Subject: [PATCH 472/815] fix(ui): deduplicate plugins when selecting multiple (#1491) --- lua/lazy/view/init.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index eb853b5..7d349d3 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -306,8 +306,12 @@ function M:setup_modes() f, t = t, f end for i = f, t do - plugins[#plugins + 1] = self.render:get_plugin(i) + local plugin = self.render:get_plugin(i) + if plugin then + plugins[plugin.name] = plugin + end end + plugins = vim.tbl_values(plugins) else plugins[1] = self.render:get_plugin() end From eab487c2520f0fe9e54eb5e3ea0606e20512492e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 31 May 2024 20:41:13 +0200 Subject: [PATCH 473/815] chore(main): release 10.21.2 (#1492) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15f52e9..c67f57a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.21.2](https://github.com/folke/lazy.nvim/compare/v10.21.1...v10.21.2) (2024-05-31) + + +### Bug Fixes + +* **ui:** deduplicate plugins when selecting multiple ([#1491](https://github.com/folke/lazy.nvim/issues/1491)) ([b77aaa0](https://github.com/folke/lazy.nvim/commit/b77aaa08cb5b178ed8662765caa41c70ff254a4c)) + ## [10.21.1](https://github.com/folke/lazy.nvim/compare/v10.21.0...v10.21.1) (2024-05-31) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f2d38b6..50ca7e4 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -182,7 +182,7 @@ M.defaults = { debug = false, } -M.version = "10.21.1" -- x-release-please-version +M.version = "10.21.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 6a141a6dbb6f6b5495ef6716c0dce898546d7b2c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 1 Jun 2024 18:20:39 +0200 Subject: [PATCH 474/815] feat: set `vim.env.LAZY` to lazy root --- lua/lazy/core/config.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 50ca7e4..0bd7a5e 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -221,6 +221,7 @@ function M.setup(opts) table.insert(M.options.install.colorscheme, "habamax") M.options.root = Util.norm(M.options.root) + vim.env.LAZY = M.options.root if type(M.options.dev.path) == "string" then M.options.dev.path = Util.norm(M.options.dev.path) end From a3edeae34a5dd2c129388c6cbb8f1d156e6f7724 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 1 Jun 2024 16:21:15 +0000 Subject: [PATCH 475/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 19a09cd..ff28c50 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 May 31 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 01 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From ad30030b6abca7dac5a493c58b4d183b3fe93202 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 1 Jun 2024 18:57:42 +0200 Subject: [PATCH 476/815] chore(main): release 10.22.0 (#1493) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c67f57a..f0c0a5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.22.0](https://github.com/folke/lazy.nvim/compare/v10.21.2...v10.22.0) (2024-06-01) + + +### Features + +* set `vim.env.LAZY` to lazy root ([6a141a6](https://github.com/folke/lazy.nvim/commit/6a141a6dbb6f6b5495ef6716c0dce898546d7b2c)) + ## [10.21.2](https://github.com/folke/lazy.nvim/compare/v10.21.1...v10.21.2) (2024-05-31) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 0bd7a5e..b4f7c2e 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -182,7 +182,7 @@ M.defaults = { debug = false, } -M.version = "10.21.2" -- x-release-please-version +M.version = "10.22.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 58536d4c8134613791504e655743243a8df554fd Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 2 Jun 2024 14:48:42 +0200 Subject: [PATCH 477/815] Revert "feat: set `vim.env.LAZY` to lazy root" This reverts commit 6a141a6dbb6f6b5495ef6716c0dce898546d7b2c. --- lua/lazy/core/config.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index b4f7c2e..9c0a849 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -221,7 +221,6 @@ function M.setup(opts) table.insert(M.options.install.colorscheme, "habamax") M.options.root = Util.norm(M.options.root) - vim.env.LAZY = M.options.root if type(M.options.dev.path) == "string" then M.options.dev.path = Util.norm(M.options.dev.path) end From 1418f30806ac0e6882c8284e0e67ad1c2bfdfb66 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 2 Jun 2024 12:49:18 +0000 Subject: [PATCH 478/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index ff28c50..d03a1c9 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 01 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 02 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 9242edb73939e7508dbd827e9c013579391f0668 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 2 Jun 2024 14:51:44 +0200 Subject: [PATCH 479/815] fix: force new release --- lua/lazy/core/config.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9c0a849..5fbf762 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -220,6 +220,7 @@ function M.setup(opts) end table.insert(M.options.install.colorscheme, "habamax") + -- root M.options.root = Util.norm(M.options.root) if type(M.options.dev.path) == "string" then M.options.dev.path = Util.norm(M.options.dev.path) From b0ba3f9399bf48c86abaa4db1a40bd0b681d5018 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 2 Jun 2024 14:53:20 +0200 Subject: [PATCH 480/815] chore(main): release 10.22.1 (#1495) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0c0a5e..78cfcad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.22.1](https://github.com/folke/lazy.nvim/compare/v10.22.0...v10.22.1) (2024-06-02) + + +### Bug Fixes + +* force new release ([9242edb](https://github.com/folke/lazy.nvim/commit/9242edb73939e7508dbd827e9c013579391f0668)) + ## [10.22.0](https://github.com/folke/lazy.nvim/compare/v10.21.2...v10.22.0) (2024-06-01) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 5fbf762..9c7bed3 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -182,7 +182,7 @@ M.defaults = { debug = false, } -M.version = "10.22.0" -- x-release-please-version +M.version = "10.22.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From f39c79fcb17ec01c24c82e139499582ee376a94b Mon Sep 17 00:00:00 2001 From: Zhizhen He Date: Mon, 3 Jun 2024 15:18:43 +0800 Subject: [PATCH 481/815] style: fix some typo (#1496) --- README.md | 10 +++++----- TODO.md | 4 ++-- lua/lazy/core/cache.lua | 4 ++-- lua/lazy/core/plugin.lua | 2 +- lua/lazy/example.lua | 4 ++-- lua/lazy/stats.lua | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index d3c1461..9bde4f9 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,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 | @@ -95,7 +95,7 @@ require("lazy").setup({ | **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | | **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)` if `opts` or `config = true` is set. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | | **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | -| **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. 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. Some plugins provide their own `build.lua` which is automatically used by lazy. So no need to specify a build step for those plugins. | +| **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. If it's a string it will be run as a shell command. When prefixed with `:` it is a Neovim command. You can also specify a list to executed multiple build commands. Some plugins provide their own `build.lua` which is automatically used by lazy. So no need to specify a build step for those plugins. | | **branch** | `string?` | Branch of the repository | | **tag** | `string?` | Tag of the repository | | **commit** | `string?` | Commit of the repository | @@ -279,8 +279,8 @@ return { -- you can use a custom url to fetch a plugin { url = "git@github.com:folke/noice.nvim.git" }, - -- local plugins can also be configure with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from Github + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub -- With the dev option, you can easily switch between the local and installed version of a plugin { "folke/noice.nvim", dev = true }, } @@ -560,7 +560,7 @@ Stats API (`require("lazy").stats()`): { -- startuptime in milliseconds till UIEnter startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & Macos) + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. real_cputime = false, diff --git a/TODO.md b/TODO.md index d3d2f09..3d4da4e 100644 --- a/TODO.md +++ b/TODO.md @@ -51,7 +51,7 @@ - [ ] add support to specify `engines`, `os` and `cpu` like in `package.json` - [ ] semver merging. Should check if two or more semver ranges are compatible and calculate the union range - - default semver merging strategy: if no version matches all, then use highest version? + - default semver merging strategy: if no version matches all, then use the highest version? - [ ] package meta index (package.lua cache for all packages) - [x] document highlight groups @@ -65,7 +65,7 @@ Maybe a quick, "for example, if you have a lua file `~/.config/nvim/lua/config/plugins.lua` that returns a table" or something it'd remove most question marks I think. -- [x] When autoinstalling the plugins the cursor isn't focused on the floating +- [x] When auto-installing the plugins the cursor isn't focused on the floating window, but on the non-floating window in the background. - [x] Doing `:Lazy clean` doesn't show which plugins were removed. - [x] Shouldn't the "Versioning" section be in the "Lockfile" chapter? diff --git a/lua/lazy/core/cache.lua b/lua/lazy/core/cache.lua index 07cb677..fc52542 100644 --- a/lua/lazy/core/cache.lua +++ b/lua/lazy/core/cache.lua @@ -8,7 +8,7 @@ local M = {} ---@class ModuleFindOpts ---@field all? boolean Search for all matches (defaults to `false`) ---@field rtp? boolean Search for modname in the runtime path (defaults to `true`) ----@field patterns? string[] Paterns to use (defaults to `{"/init.lua", ".lua"}`) +---@field patterns? string[] Patterns to use (defaults to `{"/init.lua", ".lua"}`) ---@field paths? string[] Extra paths to search for modname ---@class ModuleInfo @@ -474,7 +474,7 @@ function Loader.lsmod(path) return Loader._indexed[path] end ---- Debug function that wrapps all loaders and tracks stats +--- Debug function that wraps all loaders and tracks stats ---@private function M._profile_loaders() for l, loader in pairs(package.loaders) do diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 7bae395..905c078 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -117,7 +117,7 @@ function Spec:add(plugin, results) dir = dir_dev end elseif plugin.dev == false then - -- explicitely select the default path + -- explicitly select the default path dir = Config.options.root .. "/" .. plugin.name end diff --git a/lua/lazy/example.lua b/lua/lazy/example.lua index df52faf..5b7790a 100644 --- a/lua/lazy/example.lua +++ b/lua/lazy/example.lua @@ -80,8 +80,8 @@ return { -- you can use a custom url to fetch a plugin { url = "git@github.com:folke/noice.nvim.git" }, - -- local plugins can also be configure with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from Github + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub -- With the dev option, you can easily switch between the local and installed version of a plugin { "folke/noice.nvim", dev = true }, } diff --git a/lua/lazy/stats.lua b/lua/lazy/stats.lua index c4f1ec2..36865db 100644 --- a/lua/lazy/stats.lua +++ b/lua/lazy/stats.lua @@ -6,7 +6,7 @@ local M = {} M._stats = { -- startuptime in milliseconds till UIEnter startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & Macos) + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. real_cputime = false, From ebbf84eb23d796ffd92ad88b980d3cf89921add4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 3 Jun 2024 07:19:16 +0000 Subject: [PATCH 482/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index d03a1c9..16bfe6e 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 02 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 03 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* @@ -161,7 +161,7 @@ PLUGIN SPEC *lazy.nvim-lazy.nvim-plugin-spec* build fun(LazyPlugin) or string or a list of build commands build is executed when a plugin is installed or updated. Before running build, a plugin is first - loaded. If it’s a string it will be ran as a shell + loaded. If it’s a string it will be run as a shell command. When prefixed with : it is a Neovim command. You can also specify a list to executed multiple build commands. Some plugins provide their @@ -386,8 +386,8 @@ EXAMPLES ~ -- you can use a custom url to fetch a plugin { url = "git@github.com:folke/noice.nvim.git" }, - -- local plugins can also be configure with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from Github + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub -- With the dev option, you can easily switch between the local and installed version of a plugin { "folke/noice.nvim", dev = true }, } @@ -675,7 +675,7 @@ Stats API (`require("lazy").stats()`): { -- startuptime in milliseconds till UIEnter startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & Macos) + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. real_cputime = false, From 784a726f2e10ccbc11451a50033cb43426dfaab8 Mon Sep 17 00:00:00 2001 From: Vlad <52591095+MeanderingProgrammer@users.noreply.github.com> Date: Mon, 3 Jun 2024 21:58:19 -0700 Subject: [PATCH 483/815] style: Set vim.opt.rtp type to vim.Option (#1498) ## Details There is an issue in the `neodev` repo that mentions this: [#193](https://github.com/folke/neodev.nvim/issues/193) I think the problem comes from a combination of 2 things: 1. As mentioned in the [Reddit post](https://www.reddit.com/r/neovim/comments/1cvrilk/diagnosticwarning_after_upgrade_to_neovim_010/): `Nvim never had Lua type annotations for vim.opt`. 2. Setting `vim.opt.rtp` anywhere in the config will cause Lua-LS to infer the type for `vim.opt.rtp`. While users are unlikely to do this it does happen in `lazy.nvim`, in places shown in this PR. --- lua/lazy/core/config.lua | 1 + lua/lazy/core/loader.lua | 1 + tests/core/util_spec.lua | 1 + 3 files changed, 3 insertions(+) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9c7bed3..17ce2bd 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -237,6 +237,7 @@ function M.setup(opts) M.me = debug.getinfo(1, "S").source:sub(2) M.me = Util.norm(vim.fn.fnamemodify(M.me, ":p:h:h:h:h")) if M.options.performance.rtp.reset then + ---@type vim.Option vim.opt.rtp = { vim.fn.stdpath("config"), vim.fn.stdpath("data") .. "/site", diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 9cd5018..e07328c 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -476,6 +476,7 @@ function M.add_to_rtp(plugin) table.insert(rtp, idx_after or (#rtp + 1), after) end + ---@type vim.Option vim.opt.rtp = rtp end diff --git a/tests/core/util_spec.lua b/tests/core/util_spec.lua index a497881..643304d 100644 --- a/tests/core/util_spec.lua +++ b/tests/core/util_spec.lua @@ -5,6 +5,7 @@ local Util = require("lazy.util") describe("util", function() local rtp = vim.opt.rtp:get() before_each(function() + ---@type vim.Option vim.opt.rtp = rtp for k, v in pairs(package.loaded) do if k:find("^foobar") then From 0fc34a0cf5f5f6f998a0897119a7d846b47eaa9d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 4 Jun 2024 04:58:50 +0000 Subject: [PATCH 484/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 16bfe6e..f07b209 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 03 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 04 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 3e4c795cec32481bc6d0b30c05125fdf7ef2d412 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 6 Jun 2024 09:28:35 +0200 Subject: [PATCH 485/815] fix(keys): never lazy-load `` or empty rhs keymaps --- lua/lazy/core/handler/keys.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index bafc205..a6e9475 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -109,6 +109,10 @@ function M:_add(keys) ---@param buf? number local function add(buf) + if type(keys.rhs) == "string" and (keys.rhs == "" or keys.rhs:lower() == "") then + return self:_set(keys, buf) + end + vim.keymap.set(keys.mode, lhs, function() local plugins = self.active[keys.id] From 0c1ec520af617da89c9f0b2b8527be8894c60503 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 6 Jun 2024 07:29:39 +0000 Subject: [PATCH 486/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index f07b209..b07aad4 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 04 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 06 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From ff904178089582f90fdc625493f3d3bddbefd6ea Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 6 Jun 2024 10:15:33 +0200 Subject: [PATCH 487/815] fix(keys): buffer-local nop mappings --- lua/lazy/core/handler/keys.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index a6e9475..57fbc18 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -102,6 +102,11 @@ function M.opts(keys) return opts end +---@param keys LazyKeys +function M.is_nop(keys) + return type(keys.rhs) == "string" and (keys.rhs == "" or keys.rhs:lower() == "") +end + ---@param keys LazyKeys function M:_add(keys) local lhs = keys.lhs @@ -109,7 +114,7 @@ function M:_add(keys) ---@param buf? number local function add(buf) - if type(keys.rhs) == "string" and (keys.rhs == "" or keys.rhs:lower() == "") then + if M.is_nop(keys) then return self:_set(keys, buf) end @@ -147,7 +152,7 @@ function M:_add(keys) vim.api.nvim_create_autocmd("FileType", { pattern = keys.ft, callback = function(event) - if self.active[keys.id] then + if self.active[keys.id] and not M.is_nop(keys) then add(event.buf) else -- Only create the mapping if its managed by lazy From 70f2c090d3ffb14f8702d468e05beb240b768881 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 6 Jun 2024 12:47:53 +0200 Subject: [PATCH 488/815] chore(main): release 10.22.2 (#1500) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78cfcad..6d21386 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [10.22.2](https://github.com/folke/lazy.nvim/compare/v10.22.1...v10.22.2) (2024-06-06) + + +### Bug Fixes + +* **keys:** buffer-local nop mappings ([ff90417](https://github.com/folke/lazy.nvim/commit/ff904178089582f90fdc625493f3d3bddbefd6ea)) +* **keys:** never lazy-load `<nop>` or empty rhs keymaps ([3e4c795](https://github.com/folke/lazy.nvim/commit/3e4c795cec32481bc6d0b30c05125fdf7ef2d412)) + ## [10.22.1](https://github.com/folke/lazy.nvim/compare/v10.22.0...v10.22.1) (2024-06-02) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 17ce2bd..f01e6a9 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -182,7 +182,7 @@ M.defaults = { debug = false, } -M.version = "10.22.1" -- x-release-please-version +M.version = "10.22.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 74fd3611f291a2506c5534109689bb7b028f0566 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 6 Jun 2024 23:23:49 +0200 Subject: [PATCH 489/815] feat(util): opts merging now supports lists extending by tagging a table with __extend = true. Use with care --- lua/lazy/core/util.lua | 14 +++++++++++++- tests/core/util_spec.lua | 12 ++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index e51e670..e76f0c4 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -387,6 +387,10 @@ local function can_merge(v) return type(v) == "table" and (vim.tbl_isempty(v) or not M.is_list(v)) end +local function can_extend(v) + return type(v) == "table" and v.__extend +end + --- Merges the values similar to vim.tbl_deep_extend with the **force** behavior, --- but the values can be any type, in which case they override the values on the left. --- Values will me merged in-place in the first left-most table. If you want the result to be in @@ -402,7 +406,15 @@ function M.merge(...) end for i = 2, select("#", ...) do local value = select(i, ...) - if can_merge(ret) and can_merge(value) then + local are_t = type(ret) == "table" and type(value) == "table" + if are_t and (can_extend(ret) or can_extend(value)) then + for k, v in pairs(value) do + if k ~= "__extend" then + table.insert(ret, v) + end + end + ret.__extend = true + elseif are_t and can_merge(ret) and can_merge(value) then for k, v in pairs(value) do ret[k] = M.merge(ret[k], v) end diff --git a/tests/core/util_spec.lua b/tests/core/util_spec.lua index 643304d..f76f185 100644 --- a/tests/core/util_spec.lua +++ b/tests/core/util_spec.lua @@ -134,6 +134,18 @@ describe("util", function() input = { { a = 1 }, { b = 2, a = vim.NIL } }, output = { b = 2 }, }, + { + input = { { 1, 2, __extend = true }, { 3, 4 } }, + output = { 1, 2, 3, 4, __extend = true }, + }, + { + input = { { 1, 2, __extend = true }, { __extend = true, 3, 4 } }, + output = { 1, 2, 3, 4, __extend = true }, + }, + { + input = { { 1, 2 }, { 3, 4, __extend = true } }, + output = { 1, 2, 3, 4, __extend = true }, + }, } for _, test in ipairs(tests) do From 89ddc59d19513c5c19c8f8d2ad8573890bd00eef Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 6 Jun 2024 23:27:29 +0200 Subject: [PATCH 490/815] Revert "feat(util): opts merging now supports lists extending by tagging a table with __extend = true. Use with care" This reverts commit 74fd3611f291a2506c5534109689bb7b028f0566. --- lua/lazy/core/util.lua | 14 +------------- tests/core/util_spec.lua | 12 ------------ 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index e76f0c4..e51e670 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -387,10 +387,6 @@ local function can_merge(v) return type(v) == "table" and (vim.tbl_isempty(v) or not M.is_list(v)) end -local function can_extend(v) - return type(v) == "table" and v.__extend -end - --- Merges the values similar to vim.tbl_deep_extend with the **force** behavior, --- but the values can be any type, in which case they override the values on the left. --- Values will me merged in-place in the first left-most table. If you want the result to be in @@ -406,15 +402,7 @@ function M.merge(...) end for i = 2, select("#", ...) do local value = select(i, ...) - local are_t = type(ret) == "table" and type(value) == "table" - if are_t and (can_extend(ret) or can_extend(value)) then - for k, v in pairs(value) do - if k ~= "__extend" then - table.insert(ret, v) - end - end - ret.__extend = true - elseif are_t and can_merge(ret) and can_merge(value) then + if can_merge(ret) and can_merge(value) then for k, v in pairs(value) do ret[k] = M.merge(ret[k], v) end diff --git a/tests/core/util_spec.lua b/tests/core/util_spec.lua index f76f185..643304d 100644 --- a/tests/core/util_spec.lua +++ b/tests/core/util_spec.lua @@ -134,18 +134,6 @@ describe("util", function() input = { { a = 1 }, { b = 2, a = vim.NIL } }, output = { b = 2 }, }, - { - input = { { 1, 2, __extend = true }, { 3, 4 } }, - output = { 1, 2, 3, 4, __extend = true }, - }, - { - input = { { 1, 2, __extend = true }, { __extend = true, 3, 4 } }, - output = { 1, 2, 3, 4, __extend = true }, - }, - { - input = { { 1, 2 }, { 3, 4, __extend = true } }, - output = { 1, 2, 3, 4, __extend = true }, - }, } for _, test in ipairs(tests) do From 1f7b720cffa6d8f00ebb040bc60e8e056e0a6002 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 7 Jun 2024 09:02:52 +0200 Subject: [PATCH 491/815] feat(plugin): `opts_extend` can be a list of dotted keys that will be extended instead of merged --- lua/lazy/core/plugin.lua | 22 +++++++++++++++++++++- lua/lazy/core/util.lua | 31 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 905c078..91b36d3 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -667,7 +667,27 @@ function M._values(root, plugin, prop, is_list) end values = type(values) == "table" and values or { values } - return is_list and Util.extend(ret, values) or Util.merge(ret, values) + if is_list then + return Util.extend(ret, values) + else + ---@type {path:string[], list:any[]}[] + local lists = {} + for _, key in ipairs(plugin[prop .. "_extend"] or {}) do + local path = vim.split(key, ".", { plain = true }) + local r = Util.key_get(ret, path) + local v = Util.key_get(values, path) + if type(r) == "table" and type(v) == "table" then + lists[key] = { path = path, list = {} } + vim.list_extend(lists[key].list, r) + vim.list_extend(lists[key].list, v) + end + end + local t = Util.merge(ret, values) + for _, list in pairs(lists) do + Util.key_set(t, list.path, list.list) + end + return t + end end return M diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index e51e670..fe22abe 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -428,4 +428,35 @@ function M.lazy_require(module) }) end +---@param t table +---@param key string|string[] +---@return any +function M.key_get(t, key) + local path = type(key) == "table" and key or vim.split(key, ".", true) + local value = t + for _, k in ipairs(path) do + if type(value) ~= "table" then + return value + end + value = value[k] + end + return value +end + +---@param t table +---@param key string|string[] +---@param value any +function M.key_set(t, key, value) + local path = type(key) == "table" and key or vim.split(key, ".", true) + local last = t + for i = 1, #path - 1 do + local k = path[i] + if type(last[k]) ~= "table" then + last[k] = {} + end + last = last[k] + end + last[path[#path]] = value +end + return M From e0bc9a07e463bf849ac549b93f46363de58ffa29 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 7 Jun 2024 07:03:28 +0000 Subject: [PATCH 492/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b07aad4..fdd1cc1 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 06 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 07 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From fafe1f7c640aed75e70a10e6649612cd96f39149 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 10:54:20 +0200 Subject: [PATCH 493/815] chore(main): release 10.23.0 (#1502) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d21386..6bebedc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [10.23.0](https://github.com/folke/lazy.nvim/compare/v10.22.2...v10.23.0) (2024-06-07) + + +### Features + +* **plugin:** `opts_extend` can be a list of dotted keys that will be extended instead of merged ([1f7b720](https://github.com/folke/lazy.nvim/commit/1f7b720cffa6d8f00ebb040bc60e8e056e0a6002)) +* **util:** opts merging now supports lists extending by tagging a table with __extend = true. Use with care ([74fd361](https://github.com/folke/lazy.nvim/commit/74fd3611f291a2506c5534109689bb7b028f0566)) + ## [10.22.2](https://github.com/folke/lazy.nvim/compare/v10.22.1...v10.22.2) (2024-06-06) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f01e6a9..8b42617 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -182,7 +182,7 @@ M.defaults = { debug = false, } -M.version = "10.22.2" -- x-release-please-version +M.version = "10.23.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 034b03c80390ad67929f236871cff3ee4c6b3ba4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 7 Jun 2024 16:23:47 +0200 Subject: [PATCH 494/815] ci: Create dependabot.yml --- .github/dependabot.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..2a76c71 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "Github Actions" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" From 938e1951085b5a141184fa00543ddf6f138e0963 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 7 Jun 2024 16:26:38 +0200 Subject: [PATCH 495/815] ci: Update dependabot.yml --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2a76c71..0d08e26 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,7 +5,7 @@ version: 2 updates: - - package-ecosystem: "Github Actions" # See documentation for possible values + - package-ecosystem: "github-actions" # See documentation for possible values directory: "/" # Location of package manifests schedule: interval: "weekly" From 0aac19ccc7a09b397808e25a74034a95d38be71b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 16:28:42 +0200 Subject: [PATCH 496/815] build(deps): bump stefanzweifel/git-auto-commit-action from 4 to 5 (#1506) Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 4 to 5. - [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases) - [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/stefanzweifel/git-auto-commit-action/compare/v4...v5) --- updated-dependencies: - dependency-name: stefanzweifel/git-auto-commit-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1e290ce..3cf4007 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: demojify: true treesitter: true - name: Push changes - uses: stefanzweifel/git-auto-commit-action@v4 + uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: "chore(build): auto-generate vimdoc" commit_user_name: "github-actions[bot]" From db5c465509a96267476e6fce7a2a2739d35f968d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 16:28:52 +0200 Subject: [PATCH 497/815] build(deps): bump actions/checkout from 3 to 4 (#1508) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3cf4007..378c2b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Neovim shell: bash run: | @@ -31,7 +31,7 @@ jobs: needs: tests if: ${{ github.ref == 'refs/heads/main' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: panvimdoc uses: kdheepak/panvimdoc@main with: @@ -61,7 +61,7 @@ jobs: package-name: lazy.nvim extra-files: | lua/lazy/core/config.lua - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: tag stable versions if: ${{ steps.release.outputs.release_created }} run: | From eb4957442e3182f051b0ae11da32e06d22c190e3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 7 Jun 2024 16:31:18 +0200 Subject: [PATCH 498/815] ci: update release please. Fixes #1504 --- .github/workflows/ci.yml | 4 +--- release-please-config.json | 7 +++++++ 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 release-please-config.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 378c2b3..ee6e838 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,13 +54,11 @@ jobs: - tests runs-on: ubuntu-latest steps: - - uses: google-github-actions/release-please-action@v3 + - uses: googleapis/release-please-action@v4 id: release with: release-type: simple package-name: lazy.nvim - extra-files: | - lua/lazy/core/config.lua - uses: actions/checkout@v4 - name: tag stable versions if: ${{ steps.release.outputs.release_created }} diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..c8e5a10 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "release-type": "simple", + "extra-files": [ + "lua/lazy/core/config.lua" + ] +} From 067fd41933c9f59eb3445eb942052c651a4c9a62 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 15 Jun 2024 09:11:36 +0200 Subject: [PATCH 499/815] fix(plugin): check optional plugins again after resolving enabled. Fixes #1402 --- lua/lazy/core/plugin.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 91b36d3..8039b87 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -319,6 +319,9 @@ function Spec:fix_disabled() end end + -- check optional plugins again + self:fix_optional() + -- rebuild any plugin specs that were modified self:rebuild() end From 6944b105cbf263ae1817267254b329bdcb37c979 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 15 Jun 2024 07:12:11 +0000 Subject: [PATCH 500/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index fdd1cc1..f9d810a 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 07 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 15 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From e2e10d9cbe133265ccdcc44cafa7c10773d96837 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 15 Jun 2024 09:28:56 +0200 Subject: [PATCH 501/815] feat: find local_spec in parent directories as well. Closes #1519 --- lua/lazy/core/plugin.lua | 44 ++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 8039b87..3f4acc7 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -403,7 +403,7 @@ function Spec:import(spec) ---@type string[] local modnames = {} - if spec.import == M.LOCAL_SPEC then + if spec.import:find(M.LOCAL_SPEC, 1, true) then modnames = { spec.import } else Util.lsmod(spec.import, function(modname) @@ -414,15 +414,19 @@ function Spec:import(spec) for _, modname in ipairs(modnames) do imported = imported + 1 - Util.track({ import = modname }) + local name = modname + if modname:find(M.LOCAL_SPEC, 1, true) then + name = vim.fn.fnamemodify(modname, ":~:.") + end + Util.track({ import = name }) self.importing = modname -- unload the module so we get a clean slate ---@diagnostic disable-next-line: no-unknown package.loaded[modname] = nil Util.try(function() local mod = nil - if modname == M.LOCAL_SPEC then - mod = M.local_spec() + if modname:find(M.LOCAL_SPEC, 1, true) then + mod = M.local_spec(modname) else mod = require(modname) end @@ -546,26 +550,48 @@ function M.update_state() end end -function M.local_spec() - local filepath = vim.fn.fnamemodify(".lazy.lua", ":p") - local file = vim.secure.read(filepath) +---@param path string +function M.local_spec(path) + local file = vim.secure.read(path) if file then return loadstring(file)() end return {} end +---@return string? +function M.find_local_spec() + if not Config.options.local_spec then + return + end + local path = vim.uv.cwd() + while path ~= "" do + local file = path .. "/" .. M.LOCAL_SPEC + if vim.fn.filereadable(file) == 1 then + return file + end + local p = vim.fn.fnamemodify(path, ":h") + if p == path then + break + end + path = p + end +end + function M.load() M.loading = true -- load specs Util.track("spec") Config.spec = Spec.new() + + local local_spec = M.find_local_spec() + Config.spec:parse({ vim.deepcopy(Config.options.spec), { - import = ".lazy.lua", + import = local_spec or M.LOCAL_SPEC, cond = function() - return Config.options.local_spec and vim.fn.filereadable(M.LOCAL_SPEC) == 1 + return local_spec ~= nil end, }, { "folke/lazy.nvim" }, From 4c6479e98ad643cd584e9e7c4095c463e0d810eb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 15 Jun 2024 09:54:45 +0200 Subject: [PATCH 502/815] chore(main): release 10.24.0 (#1522) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bebedc..c8a18b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [10.24.0](https://github.com/folke/lazy.nvim/compare/v10.23.0...v10.24.0) (2024-06-15) + + +### Features + +* find local_spec in parent directories as well. Closes [#1519](https://github.com/folke/lazy.nvim/issues/1519) ([e2e10d9](https://github.com/folke/lazy.nvim/commit/e2e10d9cbe133265ccdcc44cafa7c10773d96837)) + + +### Bug Fixes + +* **plugin:** check optional plugins again after resolving enabled. Fixes [#1402](https://github.com/folke/lazy.nvim/issues/1402) ([067fd41](https://github.com/folke/lazy.nvim/commit/067fd41933c9f59eb3445eb942052c651a4c9a62)) + ## [10.23.0](https://github.com/folke/lazy.nvim/compare/v10.22.2...v10.23.0) (2024-06-07) From be5dfba54216ccb80959df24d48540f07ee127a3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 16 Jun 2024 07:09:33 +0200 Subject: [PATCH 503/815] fix(plugin): better way of dealing with local specs. Fixes #1524 --- lua/lazy/core/plugin.lua | 78 +++++++++++++++++++++------------------- lua/lazy/types.lua | 3 +- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 3f4acc7..c7716b6 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -383,10 +383,18 @@ function Spec:import(spec) if spec.import == "lazy" then return self:error("You can't name your plugins module `lazy`.") end - if type(spec.import) ~= "string" then + if type(spec.import) == "function" then + if not spec.name then + return self:error("Invalid import spec. Missing name: " .. vim.inspect(spec)) + end + elseif type(spec.import) ~= "string" then return self:error("Invalid import spec. `import` should be a string: " .. vim.inspect(spec)) end - if vim.tbl_contains(self.modules, spec.import) then + + local import_name = spec.name or spec.import + ---@cast import_name string + + if vim.tbl_contains(self.modules, import_name) then return end if spec.cond == false or (type(spec.cond) == "function" and not spec.cond()) then @@ -396,40 +404,34 @@ function Spec:import(spec) return end - self.modules[#self.modules + 1] = spec.import + self.modules[#self.modules + 1] = import_name + + local import = spec.import local imported = 0 - ---@type string[] - local modnames = {} + ---@type (string|(fun():LazyPluginSpec))[] + local modspecs = {} - if spec.import:find(M.LOCAL_SPEC, 1, true) then - modnames = { spec.import } - else - Util.lsmod(spec.import, function(modname) - modnames[#modnames + 1] = modname + if type(import) == "string" then + Util.lsmod(import, function(modname) + modspecs[#modspecs + 1] = modname end) - table.sort(modnames) + table.sort(modspecs) + else + modspecs = { spec.import } end - for _, modname in ipairs(modnames) do + for _, modspec in ipairs(modspecs) do imported = imported + 1 - local name = modname - if modname:find(M.LOCAL_SPEC, 1, true) then - name = vim.fn.fnamemodify(modname, ":~:.") - end - Util.track({ import = name }) + local modname = type(modspec) == "string" and modspec or import_name + Util.track({ import = modname }) self.importing = modname -- unload the module so we get a clean slate ---@diagnostic disable-next-line: no-unknown package.loaded[modname] = nil Util.try(function() - local mod = nil - if modname:find(M.LOCAL_SPEC, 1, true) then - mod = M.local_spec(modname) - else - mod = require(modname) - end + local mod = type(modspec) == "function" and modspec() or require(modspec) if type(mod) ~= "table" then self.importing = nil return self:error( @@ -559,7 +561,7 @@ function M.local_spec(path) return {} end ----@return string? +---@return LazySpecImport? function M.find_local_spec() if not Config.options.local_spec then return @@ -568,7 +570,16 @@ function M.find_local_spec() while path ~= "" do local file = path .. "/" .. M.LOCAL_SPEC if vim.fn.filereadable(file) == 1 then - return file + return { + name = vim.fn.fnamemodify(file, ":~:."), + import = function() + local data = vim.secure.read(file) + if data then + return loadstring(data)() + end + return {} + end, + } end local p = vim.fn.fnamemodify(path, ":h") if p == path then @@ -584,18 +595,13 @@ function M.load() Util.track("spec") Config.spec = Spec.new() - local local_spec = M.find_local_spec() - - Config.spec:parse({ + local specs = { vim.deepcopy(Config.options.spec), - { - import = local_spec or M.LOCAL_SPEC, - cond = function() - return local_spec ~= nil - end, - }, - { "folke/lazy.nvim" }, - }) + } + specs[#specs + 1] = M.find_local_spec() + specs[#specs + 1] = { "folke/lazy.nvim" } + + Config.spec:parse(specs) -- override some lazy props local lazy = Config.spec.plugins["lazy.nvim"] diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 9926aee..30bf9e5 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -78,6 +78,7 @@ ---@alias LazySpec string|LazyPluginSpec|LazySpecImport|LazySpec[] ---@class LazySpecImport ----@field import string spec module to import +---@field import string|(fun():LazyPluginSpec) spec module to import +---@field name? string ---@field enabled? boolean|(fun():boolean) ---@field cond? boolean|(fun():boolean) From 5da0245f0530f004283a66c0594efded7244c0f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 16 Jun 2024 05:10:11 +0000 Subject: [PATCH 504/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index f9d810a..b0c4003 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 15 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 16 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 38d6b74b63dc410ac5d7f4bb4c62dfeec74e366a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 16 Jun 2024 07:15:01 +0200 Subject: [PATCH 505/815] chore(main): release 10.24.1 (#1525) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8a18b2..1edb3e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.24.1](https://github.com/folke/lazy.nvim/compare/v10.24.0...v10.24.1) (2024-06-16) + + +### Bug Fixes + +* **plugin:** better way of dealing with local specs. Fixes [#1524](https://github.com/folke/lazy.nvim/issues/1524) ([be5dfba](https://github.com/folke/lazy.nvim/commit/be5dfba54216ccb80959df24d48540f07ee127a3)) + ## [10.24.0](https://github.com/folke/lazy.nvim/compare/v10.23.0...v10.24.0) (2024-06-15) From b4316da7310682144c279c5f0451e59ee5f6c9d1 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 16 Jun 2024 15:52:21 +0200 Subject: [PATCH 506/815] fix(plugin): rebuild optional when needed and remove frags from parent deps. Fixes #1402 --- lua/lazy/core/plugin.lua | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index c7716b6..8d18e33 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -232,6 +232,15 @@ function Spec:remove_fragments(id, opts) else local plugin = self.plugins[id] repeat + if plugin._.fpid then + local parent = self.fragments[plugin._.fpid] + if parent then + parent._.fdeps = vim.tbl_filter(function(fid) + return fid ~= plugin._.fid + end, parent._.fdeps) + self.dirty[parent.name] = true + end + end fids[#fids + 1] = plugin._.fid plugin = plugin._.super until not plugin @@ -318,11 +327,10 @@ function Spec:fix_disabled() self.disabled[plugin.name] = plugin end end + self:rebuild() -- check optional plugins again self:fix_optional() - - -- rebuild any plugin specs that were modified self:rebuild() end From c501b429cf995c645454539b924aaefae45bb9eb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 16 Jun 2024 16:25:23 +0200 Subject: [PATCH 507/815] chore(main): release 10.24.2 (#1526) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1edb3e3..bf69e91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.24.2](https://github.com/folke/lazy.nvim/compare/v10.24.1...v10.24.2) (2024-06-16) + + +### Bug Fixes + +* **plugin:** rebuild optional when needed and remove frags from parent deps. Fixes [#1402](https://github.com/folke/lazy.nvim/issues/1402) ([b4316da](https://github.com/folke/lazy.nvim/commit/b4316da7310682144c279c5f0451e59ee5f6c9d1)) + ## [10.24.1](https://github.com/folke/lazy.nvim/compare/v10.24.0...v10.24.1) (2024-06-16) From 025520d083c61baa7cd1f45807f5fe1ac9fbb50d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Jun 2024 00:35:56 +0200 Subject: [PATCH 508/815] fix(util): dump --- lua/lazy/util.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 705ca39..970b066 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -237,6 +237,8 @@ function M._dump(value, result) table.insert(result, tostring(value)) elseif t == "string" then table.insert(result, ("%q"):format(value)) + elseif t == "table" and value._raw then + table.insert(result, value._raw) elseif t == "table" then table.insert(result, "{") local i = 1 @@ -244,7 +246,11 @@ function M._dump(value, result) for k, v in pairs(value) do if k == i then elseif type(k) == "string" then - table.insert(result, ("[%q]="):format(k)) + if k:match("^[a-zA-Z]+$") then + table.insert(result, ("%s="):format(k)) + else + table.insert(result, ("[%q]="):format(k)) + end else table.insert(result, k .. "=") end From f4d57485b051e90fecf93ce16059b8dcdb9ceb12 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Jun 2024 00:36:11 +0200 Subject: [PATCH 509/815] refactor: reloader --- lua/lazy/core/util.lua | 3 +++ lua/lazy/manage/reloader.lua | 29 +++++++++++++++++------------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index fe22abe..f72ab21 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -92,7 +92,10 @@ function M.pretty_trace(opts) return #trace > 0 and ("\n\n# stacktrace:\n" .. table.concat(trace, "\n")) or "" end +---@generic R +---@param fn fun():R ---@param opts? string|{msg:string, on_error:fun(msg)} +---@return R function M.try(fn, opts) opts = type(opts) == "string" and { msg = opts } or opts or {} local msg = opts.msg diff --git a/lua/lazy/manage/reloader.lua b/lua/lazy/manage/reloader.lua index ef9305c..1a2b042 100644 --- a/lua/lazy/manage/reloader.lua +++ b/lua/lazy/manage/reloader.lua @@ -84,19 +84,24 @@ function M.check(start) end if not (start or #changes == 0) then - vim.schedule(function() - if Config.options.change_detection.notify and not Config.headless() then - local lines = { "# Config Change Detected. Reloading...", "" } - for _, change in ipairs(changes) do - table.insert(lines, "- **" .. change.what .. "**: `" .. vim.fn.fnamemodify(change.file, ":p:~:.") .. "`") - end - Util.warn(lines) - end - Plugin.load() - vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) - vim.api.nvim_exec_autocmds("User", { pattern = "LazyReload", modeline = false }) - end) + M.reload(changes) end end +---@param {file:string, what:string}[] +function M.reload(changes) + vim.schedule(function() + if Config.options.change_detection.notify and not Config.headless() then + local lines = { "# Config Change Detected. Reloading...", "" } + for _, change in ipairs(changes) do + table.insert(lines, "- **" .. change.what .. "**: `" .. vim.fn.fnamemodify(change.file, ":p:~:.") .. "`") + end + Util.warn(lines) + end + Plugin.load() + vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) + vim.api.nvim_exec_autocmds("User", { pattern = "LazyReload", modeline = false }) + end) +end + return M From cd6a8293430a7fadf6a093dfdfbdb1ddbaf8ae7d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 17 Jun 2024 22:36:50 +0000 Subject: [PATCH 510/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b0c4003..b3517d7 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 16 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 17 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 1325119e85d361db17644989fd2f2a9321ae0628 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Jun 2024 23:21:42 +0200 Subject: [PATCH 511/815] ci: docs --- .github/workflows/docs.yaml | 51 +++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/docs.yaml diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 0000000..baa6ad4 --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,51 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: + - docs + # Review gh actions docs if you want to further define triggers, paths, etc + # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on + +jobs: + build: + name: Build Docusaurus + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-node@v4 + with: + node-version: 18 + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Build website + run: pnpm build + + - name: Upload Build Artifact + uses: actions/upload-pages-artifact@v3 + with: + path: build + + deploy: + name: Deploy to GitHub Pages + needs: build + + # Grant GITHUB_TOKEN the permissions required to make a Pages deployment + permissions: + pages: write # to deploy to Pages + id-token: write # to verify the deployment originates from an appropriate source + + # Deploy to the github-pages environment + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 From 07269d494e50ec96a7bbde4ad51087e5ec8d7970 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 18 Jun 2024 21:22:17 +0000 Subject: [PATCH 512/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b3517d7..10657ea 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 17 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 18 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From acc0449d833a1a7410b10cd771455777b82ef971 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Jun 2024 23:36:59 +0200 Subject: [PATCH 513/815] ci: docs deploy --- .github/workflows/{docs.yaml => deploy.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{docs.yaml => deploy.yaml} (100%) diff --git a/.github/workflows/docs.yaml b/.github/workflows/deploy.yaml similarity index 100% rename from .github/workflows/docs.yaml rename to .github/workflows/deploy.yaml From bc620783663ab09d16bff9fdecc07da65b2a1528 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Jun 2024 23:48:55 +0200 Subject: [PATCH 514/815] ci: remove deploy --- .github/workflows/deploy.yaml | 51 ----------------------------------- 1 file changed, 51 deletions(-) delete mode 100644 .github/workflows/deploy.yaml diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml deleted file mode 100644 index baa6ad4..0000000 --- a/.github/workflows/deploy.yaml +++ /dev/null @@ -1,51 +0,0 @@ -name: Deploy to GitHub Pages - -on: - push: - branches: - - docs - # Review gh actions docs if you want to further define triggers, paths, etc - # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on - -jobs: - build: - name: Build Docusaurus - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: actions/setup-node@v4 - with: - node-version: 18 - cache: pnpm - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - name: Build website - run: pnpm build - - - name: Upload Build Artifact - uses: actions/upload-pages-artifact@v3 - with: - path: build - - deploy: - name: Deploy to GitHub Pages - needs: build - - # Grant GITHUB_TOKEN the permissions required to make a Pages deployment - permissions: - pages: write # to deploy to Pages - id-token: write # to verify the deployment originates from an appropriate source - - # Deploy to the github-pages environment - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - - runs-on: ubuntu-latest - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 From 6994ee3751778bbd84ffa62c03b280cd8bbd5e11 Mon Sep 17 00:00:00 2001 From: Ben Elan Date: Sat, 22 Jun 2024 21:59:54 -0700 Subject: [PATCH 515/815] ci(release): fix version bumping in extra-file (#1534) * ci(release): fix version bumping in extra-file Release Please's doc is either incorrect or they have a bug, but this resolves the issue. * ci(release): use manifest file --- .github/.release-please-manifest.json | 3 +++ .github/release-please-config.json | 9 +++++++++ .github/workflows/ci.yml | 4 ++-- release-please-config.json | 7 ------- 4 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 .github/.release-please-manifest.json create mode 100644 .github/release-please-config.json delete mode 100644 release-please-config.json diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json new file mode 100644 index 0000000..47a48fe --- /dev/null +++ b/.github/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "10.24.2" +} diff --git a/.github/release-please-config.json b/.github/release-please-config.json new file mode 100644 index 0000000..18c3d65 --- /dev/null +++ b/.github/release-please-config.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "simple", + "extra-files": ["lua/lazy/core/config.lua"] + } + } +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee6e838..c7d3156 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,8 +57,8 @@ jobs: - uses: googleapis/release-please-action@v4 id: release with: - release-type: simple - package-name: lazy.nvim + config-file: .github/release-please-config.json + manifest-file: .github/.release-please-manifest.json - uses: actions/checkout@v4 - name: tag stable versions if: ${{ steps.release.outputs.release_created }} diff --git a/release-please-config.json b/release-please-config.json deleted file mode 100644 index c8e5a10..0000000 --- a/release-please-config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "release-type": "simple", - "extra-files": [ - "lua/lazy/core/config.lua" - ] -} From 849890c2c4fcd89133b6f4c43eeae13e18c8c550 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 23 Jun 2024 05:00:24 +0000 Subject: [PATCH 516/815] chore(build): auto-generate vimdoc --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 10657ea..876ea0a 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,4 +1,4 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 18 +*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 23 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* From 4ea9fe060042f345960ad0c01aa7bca91405e10a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 23 Jun 2024 07:38:56 +0200 Subject: [PATCH 517/815] chore(main): release 10.24.3 (#1529) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 47a48fe..5596560 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "10.24.2" + ".": "10.24.3" } diff --git a/CHANGELOG.md b/CHANGELOG.md index bf69e91..1ad4080 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [10.24.3](https://github.com/folke/lazy.nvim/compare/v10.24.2...v10.24.3) (2024-06-23) + + +### Bug Fixes + +* **util:** dump ([025520d](https://github.com/folke/lazy.nvim/commit/025520d083c61baa7cd1f45807f5fe1ac9fbb50d)) + ## [10.24.2](https://github.com/folke/lazy.nvim/compare/v10.24.1...v10.24.2) (2024-06-16) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 8b42617..943505b 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -182,7 +182,7 @@ M.defaults = { debug = false, } -M.version = "10.23.0" -- x-release-please-version +M.version = "10.24.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 8eba74c3fc41e1a364225f744022f8b3ff11d796 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Jun 2024 19:40:58 +0200 Subject: [PATCH 518/815] feat: packspec --- lua/lazy/core/config.lua | 13 ++++ lua/lazy/core/packspec.lua | 125 +++++++++++++++++++++++++++++++++++++ lua/lazy/core/plugin.lua | 27 +++++++- lua/lazy/manage/init.lua | 2 + lua/lazy/view/commands.lua | 16 ++++- tests/core/plugin_spec.lua | 9 +++ 6 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 lua/lazy/core/packspec.lua diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 943505b..d843db2 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -179,6 +179,11 @@ M.defaults = { -- Track each new require in the Lazy profiling tab require = false, }, + packspec = { + enabled = true, + versions = true, -- Honor dependency versions in packspecs + path = vim.fn.stdpath("state") .. "/lazy/packspec.lua", + }, debug = false, } @@ -281,6 +286,14 @@ function M.setup(opts) require("lazy.manage.checker").start() end, 10) end + + -- useful for plugin developers when making changes to a packspec file + vim.api.nvim_create_autocmd("BufWritePost", { + pattern = "package.lua", + callback = function() + require("lazy.view.commands").cmd("packspec") + end, + }) end, }) diff --git a/lua/lazy/core/packspec.lua b/lua/lazy/core/packspec.lua new file mode 100644 index 0000000..75217d1 --- /dev/null +++ b/lua/lazy/core/packspec.lua @@ -0,0 +1,125 @@ +local Config = require("lazy.core.config") +local Util = require("lazy.util") + +---@class PackSpec +---@field dependencies? table +---@field lazy? LazyPluginSpec +local M = {} + +M.lazy_file = "lazy.lua" +M.pkg_file = "pkg.json" +M.enable_lazy_file = false + +---@alias LazyPkg {lazy?:(fun():LazySpec), pkg?:PackSpec} + +---@type table +M.packspecs = nil +---@type table +M.specs = {} + +---@param spec LazyPkg +---@param plugin LazyPlugin +---@return LazySpec? +local function convert(plugin, spec) + ---@type LazySpec + local ret = {} + + local pkg = spec.pkg + if pkg then + if pkg.dependencies then + for url, version in pairs(pkg.dependencies) do + if (not Config.options.packspec.versions) or version == "*" or version == "" then + version = nil + end + -- HACK: Add `.git` to github urls + if url:find("github") and not url:match("%.git$") then + url = url .. ".git" + end + ret[#ret + 1] = { url = url, version = version } + end + end + local p = pkg.lazy + if p then + p.url = p.url or plugin.url + p.dir = p.dir or plugin.dir + ret[#ret + 1] = p + end + end + + if spec.lazy then + ret[#ret + 1] = spec.lazy() + end + + return ret +end + +local function load() + Util.track("packspec") + M.packspecs = {} + if vim.loop.fs_stat(Config.options.packspec.path) then + Util.try(function() + M.packspecs = loadfile(Config.options.packspec.path)() + end, "Error loading packspecs:") + end + Util.track() +end + +---@param plugin LazyPlugin +---@return LazySpec? +function M.get(plugin) + if not M.packspecs then + load() + end + + if not M.packspecs[plugin.dir] then + return + end + M.specs[plugin.dir] = M.specs[plugin.dir] or convert(plugin, M.packspecs[plugin.dir]) + return vim.deepcopy(M.specs[plugin.dir]) +end + +function M.update() + local ret = {} + for _, plugin in pairs(Config.plugins) do + local spec = { + pkg = M.pkg(plugin), + lazy = M.enable_lazy_file and M.lazy_pkg(plugin) or nil, + } + if not vim.tbl_isempty(spec) then + ret[plugin.dir] = spec + end + end + local code = "return " .. Util.dump(ret) + Util.write_file(Config.options.packspec.path, code) + M.packspecs = nil + M.specs = {} +end + +---@param plugin LazyPlugin +function M.lazy_pkg(plugin) + local file = Util.norm(plugin.dir .. "/" .. M.lazy_file) + if Util.file_exists(file) then + ---@type LazySpec + local chunk = Util.try(function() + return loadfile(file) + end, "`" .. M.lazy_file .. "` for **" .. plugin.name .. "** has errors:") + if chunk then + return { _raw = ([[function() %s end]]):format(Util.read_file(file)) } + else + Util.error("Invalid `package.lua` for **" .. plugin.name .. "**") + end + end +end + +---@param plugin LazyPlugin +function M.pkg(plugin) + local file = Util.norm(plugin.dir .. "/" .. M.pkg_file) + if Util.file_exists(file) then + ---@type PackSpec + return Util.try(function() + return vim.json.decode(Util.read_file(file)) + end, "`" .. M.pkg_file .. "` for **" .. plugin.name .. "** has errors:") + end +end + +return M diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 8d18e33..3de712f 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -1,4 +1,5 @@ local Config = require("lazy.core.config") +local Packspec = require("lazy.core.packspec") local Util = require("lazy.core.util") ---@class LazyCorePlugin @@ -15,6 +16,8 @@ M.loading = false ---@field notifs {msg:string, level:number, file?:string}[] ---@field importing? string ---@field optional? boolean +---@field packspecs table +---@field names table local Spec = {} M.Spec = Spec M.last_fid = 0 @@ -32,7 +35,9 @@ function Spec.new(spec, opts) self.dirty = {} self.notifs = {} self.ignore_installed = {} + self.packspecs = {} self.optional = opts and opts.optional + self.names = {} if spec then self:parse(spec) end @@ -45,6 +50,7 @@ function Spec:parse(spec) end -- PERF: optimized code to get package name without using lua patterns +---@return string function Spec.get_name(pkg) local name = pkg:sub(-4) == ".git" and pkg:sub(1, -5) or pkg name = name:sub(-1) == "/" and name:sub(1, -2) or name @@ -83,7 +89,17 @@ function Spec:add(plugin, results) -- local plugin plugin.name = plugin.name or Spec.get_name(plugin.dir) elseif plugin.url then - plugin.name = plugin.name or Spec.get_name(plugin.url) + if plugin.name then + self.names[plugin.url] = plugin.name + local name = Spec.get_name(plugin.url) + if name and self.plugins[name] then + self.plugins[name].name = plugin.name + self.plugins[plugin.name] = self.plugins[name] + self.plugins[name] = nil + end + else + plugin.name = self.names[plugin.url] or Spec.get_name(plugin.url) + end -- check for dev plugins if plugin.dev == nil then for _, pattern in ipairs(Config.options.dev.patterns) do @@ -156,6 +172,15 @@ function Spec:add(plugin, results) table.remove(M.fid_stack) end + -- import the plugin's spec + if Config.options.packspec.enabled and plugin.dir and not self.packspecs[plugin.dir] then + self.packspecs[plugin.dir] = true + local packspec = Packspec.get(plugin) + if packspec then + self:normalize(packspec, nil, true) + end + end + if self.plugins[plugin.name] then plugin = self:merge(self.plugins[plugin.name], plugin) end diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 897bdbf..f5a96a9 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -92,6 +92,7 @@ function M.install(opts) }, opts):wait(function() require("lazy.manage.lock").update() require("lazy.help").update() + require("lazy.core.packspec").update() end) end @@ -116,6 +117,7 @@ function M.update(opts) }, opts):wait(function() require("lazy.manage.lock").update() require("lazy.help").update() + require("lazy.core.packspec").update() end) end -- diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index 1210917..13c5070 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -34,6 +34,20 @@ M.commands = { health = function() vim.cmd.checkhealth("lazy") end, + pkg = function(opts) + local Pkg = require("lazy.core.packspec") + Pkg.update() + require("lazy.manage.reloader").reload({ + { + file = "packspec", --Config.options.packspec.path, + what = "changed", + }, + }) + for _, plugin in pairs(opts and opts.plugins or {}) do + local spec = Pkg.get(plugin) + Util.info(vim.inspect(spec), { lang = "lua", title = plugin.name }) + end + end, home = function() View.show("home") end, @@ -74,7 +88,7 @@ M.commands = { } function M.complete(cmd, prefix) - if not (ViewConfig.commands[cmd] or {}).plugins then + if not (ViewConfig.commands[cmd] or {}).plugins and cmd ~= "pkg" then return end ---@type string[] diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index 51f6e03..c15505f 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -30,6 +30,14 @@ describe("plugin spec url/name", function() { { "foo/bar", name = "foobar" }, { [1] = "foo/bar", name = "foobar", url = "https://github.com/foo/bar.git" } }, { { "foo/bar", url = "123" }, { [1] = "foo/bar", name = "123", url = "123" } }, { { url = "https://foobar" }, { name = "foobar", url = "https://foobar" } }, + { + { { url = "https://foo", name = "foobar" }, { url = "https://foo" } }, + { name = "foobar", url = "https://foo" }, + }, + { + { { url = "https://foo" }, { url = "https://foo", name = "foobar" } }, + { name = "foobar", url = "https://foo" }, + }, { { url = "ssh://foobar" }, { name = "foobar", url = "ssh://foobar" } }, { "foo/bar", { [1] = "foo/bar", name = "bar", url = "https://github.com/foo/bar.git" } }, { { { { "foo/bar" } } }, { [1] = "foo/bar", name = "bar", url = "https://github.com/foo/bar.git" } }, @@ -46,6 +54,7 @@ describe("plugin spec url/name", function() plugins[1]._ = {} assert(#spec.notifs == 0) assert.equal(1, #plugins) + plugins[1]._.super = nil assert.same(test[2], plugins[1]) end) end From f1ba2e3d057ae5c03d04134a9d538d0b2251f13b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Jun 2024 19:39:47 +0200 Subject: [PATCH 519/815] feat: luarocks support --- lua/lazy/core/config.lua | 17 +++++++ lua/lazy/core/loader.lua | 7 ++- lua/lazy/core/plugin.lua | 2 + lua/lazy/manage/init.lua | 4 +- lua/lazy/manage/rocks.lua | 89 ++++++++++++++++++++++++++++++++++ lua/lazy/manage/task/rocks.lua | 57 ++++++++++++++++++++++ lua/lazy/types.lua | 3 ++ 7 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 lua/lazy/manage/rocks.lua create mode 100644 lua/lazy/manage/task/rocks.lua diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index d843db2..58f9e10 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -31,6 +31,9 @@ M.defaults = { -- increase downloads a lot. filter = true, }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + }, dev = { ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects path = "~/projects", @@ -212,6 +215,9 @@ M.mapleader = nil ---@type string M.maplocalleader = nil +---@type {specs:string, tree:string, path:string, cpath:string} +M.rocks = {} + function M.headless() return #vim.api.nvim_list_uis() == 0 end @@ -262,6 +268,17 @@ function M.setup(opts) M.mapleader = vim.g.mapleader M.maplocalleader = vim.g.maplocalleader + M.rocks = { + specs = M.options.rocks.root .. "/specs", + tree = M.options.rocks.root .. "/tree", + path = M.options.rocks.root .. "/tree/share/lua/5.1", + cpath = M.options.rocks.root .. "/tree/lib/lua/5.1", + } + vim.fn.mkdir(M.rocks.specs, "p") + vim.fn.mkdir(M.rocks.tree, "p") + package.path = package.path .. ";" .. M.rocks.path .. "/?.lua;" .. M.rocks.path .. "/?/init.lua;" + package.cpath = package.cpath .. ";" .. M.rocks.cpath .. "/?." .. (jit.os:find("Windows") and "dll" or "so") .. ";" + if M.headless() then require("lazy.view.commands").setup() end diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index e07328c..ffd8753 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -44,6 +44,7 @@ function M.setup() while M.install_missing() do count = count + 1 if count > 5 then + Util.error("Too many rounds of missing plugins") break end end @@ -66,7 +67,11 @@ end -- multiple rounds can happen when importing a spec from a missing plugin function M.install_missing() for _, plugin in pairs(Config.plugins) do - if not (plugin._.installed or Plugin.has_errors(plugin)) then + local installed = plugin._.installed + local has_errors = Plugin.has_errors(plugin) + local rocks_installed = plugin._.rocks_installed ~= false + + if not has_errors and not (installed and rocks_installed) then for _, colorscheme in ipairs(Config.options.install.colorscheme) do if colorscheme == "default" then break diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 3de712f..6c8d7da 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -570,6 +570,8 @@ function M.update_state() installed[name] = nil end + require("lazy.manage.rocks").update_state() + Config.to_clean = {} for pack, dir_type in pairs(installed) do table.insert(Config.to_clean, { diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index f5a96a9..308930e 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -82,12 +82,13 @@ function M.install(opts) pipeline = { "git.clone", { "git.checkout", lockfile = opts.lockfile }, + "rocks.install", "plugin.docs", "wait", "plugin.build", }, plugins = function(plugin) - return plugin.url and not plugin._.installed + return plugin.url and not (plugin._.installed and plugin._.rocks_installed ~= false) end, }, opts):wait(function() require("lazy.manage.lock").update() @@ -106,6 +107,7 @@ function M.update(opts) "git.fetch", "git.status", { "git.checkout", lockfile = opts.lockfile }, + "rocks.install", "plugin.docs", "wait", "plugin.build", diff --git a/lua/lazy/manage/rocks.lua b/lua/lazy/manage/rocks.lua new file mode 100644 index 0000000..efad65d --- /dev/null +++ b/lua/lazy/manage/rocks.lua @@ -0,0 +1,89 @@ +--# selene:allow(incorrect_standard_library_use) + +local Config = require("lazy.core.config") +local Util = require("lazy.core.util") + +---@class LazyRock +---@field plugin string +---@field name string +---@field spec string +---@field installed boolean + +local M = {} +---@type LazyRock[] +M.rocks = {} + +---@param ... string +---@return string[] +function M.args(...) + local ret = { "--tree", Config.rocks.tree, "--lua-version", "5.1" } + vim.list_extend(ret, { ... }) + return ret +end + +function M.parse(rockspec_file) + local rockspec = {} + local ret, err = loadfile(rockspec_file, "t", rockspec) + if not ret then + error(err) + end + ret() + return rockspec +end + +-- dd(M.parse("/home/folke/.local/share/nvim/lazy/neorg/neorg-scm-1.rockspec")) + +---@param plugin LazyPlugin +function M.get_rockspec(plugin) + assert(plugin.rocks and #plugin.rocks > 0, plugin.name .. " has no rocks") + local rockspec_file = Config.rocks.specs .. "/lazy-" .. plugin.name .. "-0.0-0.rockspec" + require("lazy.util").write_file( + rockspec_file, + ([[ +rockspec_format = "3.0" +package = "lazy-%s" +version = "0.0-0" +source = { url = "%s" } +dependencies = %s +build = { type = "builtin" } +]]):format(plugin.name, plugin.url, vim.inspect(plugin.rocks)) + ) + return rockspec_file +end + +function M.update_state() + local root = Config.rocks.tree .. "/lib/luarocks/rocks-5.1" + ---@type table + local installed = {} + Util.ls(root, function(_, name, type) + if type == "directory" then + installed[name] = name + end + end) + + ---@type LazyRock[] + local rocks = {} + M.rocks = rocks + + for _, plugin in pairs(Config.plugins) do + if plugin.rocks then + plugin._.rocks = {} + plugin._.rocks_installed = true + for _, spec in ipairs(plugin.rocks) do + spec = vim.trim(spec) + local name = spec:gsub("%s.*", "") + local rock = { + plugin = plugin.name, + name = name, + spec = spec, + installed = installed[name] ~= nil, + } + plugin._.rocks_installed = plugin._.rocks_installed and rock.installed + table.insert(plugin._.rocks, rock) + table.insert(rocks, rock) + end + end + end +end + +return M diff --git a/lua/lazy/manage/task/rocks.lua b/lua/lazy/manage/task/rocks.lua new file mode 100644 index 0000000..b2f61bf --- /dev/null +++ b/lua/lazy/manage/task/rocks.lua @@ -0,0 +1,57 @@ +local Rocks = require("lazy.manage.rocks") + +---@type table +local M = {} + +local running = false +local has_rocks = nil ---@type boolean? + +M.install = { + skip = function(plugin) + return plugin._.rocks_installed ~= false + end, + run = function(self) + if has_rocks == nil then + has_rocks = vim.fn.executable("luarocks") == 1 + end + if not has_rocks then + self.error = "This plugin has luarocks dependencies,\nbut the `luarocks` executable is not found.\nPlease install https://luarocks.org/ to continue.\n" + .. "luarock deps: " + .. vim.inspect(self.plugin.rocks) + return + end + + local started = false + + local function install() + started = true + self.status = "luarocks (install)" + vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) + self:spawn("luarocks", { + args = Rocks.args("install", "--deps-mode", "one", "--deps-only", Rocks.get_rockspec(self.plugin)), + on_exit = function(ok) + running = false + if ok then + self.plugin._.rocks_installed = true + end + end, + }) + end + + local timer = vim.uv.new_timer() + timer:start(0, 100, function() + if not running then + running = true + timer:stop() + vim.schedule(install) + end + end) + self.status = "luarocks (pending)" + + table.insert(self._running, function() + return not started + end) + end, +} + +return M diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 30bf9e5..831327e 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -24,6 +24,8 @@ ---@field rtp_loaded? boolean ---@field handlers? LazyPluginHandlers ---@field cache? table +---@field rocks? LazyRock[] +---@field rocks_installed? boolean ---@alias PluginOpts table|fun(self:LazyPlugin, opts:table):table? @@ -60,6 +62,7 @@ ---@field lazy? boolean ---@field priority? number Only useful for lazy=false plugins to force loading certain plugins first. Default priority is 50 ---@field dev? boolean If set, then link to the respective folder under your ~/projects +---@field rocks? string[] ---@class LazyPlugin: LazyPluginBase,LazyPluginHandlers,LazyPluginHooks,LazyPluginRef ---@field dependencies? string[] From 3be55a46158cde17e2b853e531d260f3738a5346 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Jun 2024 21:54:54 +0200 Subject: [PATCH 520/815] feat: added support for plugin packages by lazy, rockspec and packspec --- lua/lazy/core/config.lua | 20 +++--- lua/lazy/core/packspec.lua | 125 ------------------------------------- lua/lazy/core/plugin.lua | 16 ++--- lua/lazy/manage/init.lua | 4 +- lua/lazy/manage/rocks.lua | 39 ++++++------ lua/lazy/pkg/init.lua | 92 +++++++++++++++++++++++++++ lua/lazy/pkg/lazy.lua | 28 +++++++++ lua/lazy/pkg/packspec.lua | 54 ++++++++++++++++ lua/lazy/pkg/rockspec.lua | 55 ++++++++++++++++ lua/lazy/util.lua | 15 +++-- lua/lazy/view/commands.lua | 4 +- 11 files changed, 281 insertions(+), 171 deletions(-) delete mode 100644 lua/lazy/core/packspec.lua create mode 100644 lua/lazy/pkg/init.lua create mode 100644 lua/lazy/pkg/lazy.lua create mode 100644 lua/lazy/pkg/packspec.lua create mode 100644 lua/lazy/pkg/rockspec.lua diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 58f9e10..db79250 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -31,8 +31,19 @@ M.defaults = { -- increase downloads a lot. filter = true, }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, rocks = { root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", }, dev = { ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects @@ -182,11 +193,6 @@ M.defaults = { -- Track each new require in the Lazy profiling tab require = false, }, - packspec = { - enabled = true, - versions = true, -- Honor dependency versions in packspecs - path = vim.fn.stdpath("state") .. "/lazy/packspec.lua", - }, debug = false, } @@ -306,9 +312,9 @@ function M.setup(opts) -- useful for plugin developers when making changes to a packspec file vim.api.nvim_create_autocmd("BufWritePost", { - pattern = "package.lua", + pattern = "lazy.lua", callback = function() - require("lazy.view.commands").cmd("packspec") + require("lazy.view.commands").cmd("pkg") end, }) end, diff --git a/lua/lazy/core/packspec.lua b/lua/lazy/core/packspec.lua deleted file mode 100644 index 75217d1..0000000 --- a/lua/lazy/core/packspec.lua +++ /dev/null @@ -1,125 +0,0 @@ -local Config = require("lazy.core.config") -local Util = require("lazy.util") - ----@class PackSpec ----@field dependencies? table ----@field lazy? LazyPluginSpec -local M = {} - -M.lazy_file = "lazy.lua" -M.pkg_file = "pkg.json" -M.enable_lazy_file = false - ----@alias LazyPkg {lazy?:(fun():LazySpec), pkg?:PackSpec} - ----@type table -M.packspecs = nil ----@type table -M.specs = {} - ----@param spec LazyPkg ----@param plugin LazyPlugin ----@return LazySpec? -local function convert(plugin, spec) - ---@type LazySpec - local ret = {} - - local pkg = spec.pkg - if pkg then - if pkg.dependencies then - for url, version in pairs(pkg.dependencies) do - if (not Config.options.packspec.versions) or version == "*" or version == "" then - version = nil - end - -- HACK: Add `.git` to github urls - if url:find("github") and not url:match("%.git$") then - url = url .. ".git" - end - ret[#ret + 1] = { url = url, version = version } - end - end - local p = pkg.lazy - if p then - p.url = p.url or plugin.url - p.dir = p.dir or plugin.dir - ret[#ret + 1] = p - end - end - - if spec.lazy then - ret[#ret + 1] = spec.lazy() - end - - return ret -end - -local function load() - Util.track("packspec") - M.packspecs = {} - if vim.loop.fs_stat(Config.options.packspec.path) then - Util.try(function() - M.packspecs = loadfile(Config.options.packspec.path)() - end, "Error loading packspecs:") - end - Util.track() -end - ----@param plugin LazyPlugin ----@return LazySpec? -function M.get(plugin) - if not M.packspecs then - load() - end - - if not M.packspecs[plugin.dir] then - return - end - M.specs[plugin.dir] = M.specs[plugin.dir] or convert(plugin, M.packspecs[plugin.dir]) - return vim.deepcopy(M.specs[plugin.dir]) -end - -function M.update() - local ret = {} - for _, plugin in pairs(Config.plugins) do - local spec = { - pkg = M.pkg(plugin), - lazy = M.enable_lazy_file and M.lazy_pkg(plugin) or nil, - } - if not vim.tbl_isempty(spec) then - ret[plugin.dir] = spec - end - end - local code = "return " .. Util.dump(ret) - Util.write_file(Config.options.packspec.path, code) - M.packspecs = nil - M.specs = {} -end - ----@param plugin LazyPlugin -function M.lazy_pkg(plugin) - local file = Util.norm(plugin.dir .. "/" .. M.lazy_file) - if Util.file_exists(file) then - ---@type LazySpec - local chunk = Util.try(function() - return loadfile(file) - end, "`" .. M.lazy_file .. "` for **" .. plugin.name .. "** has errors:") - if chunk then - return { _raw = ([[function() %s end]]):format(Util.read_file(file)) } - else - Util.error("Invalid `package.lua` for **" .. plugin.name .. "**") - end - end -end - ----@param plugin LazyPlugin -function M.pkg(plugin) - local file = Util.norm(plugin.dir .. "/" .. M.pkg_file) - if Util.file_exists(file) then - ---@type PackSpec - return Util.try(function() - return vim.json.decode(Util.read_file(file)) - end, "`" .. M.pkg_file .. "` for **" .. plugin.name .. "** has errors:") - end -end - -return M diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 6c8d7da..de6d228 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -1,5 +1,5 @@ local Config = require("lazy.core.config") -local Packspec = require("lazy.core.packspec") +local Pkg = require("lazy.pkg") local Util = require("lazy.core.util") ---@class LazyCorePlugin @@ -16,7 +16,7 @@ M.loading = false ---@field notifs {msg:string, level:number, file?:string}[] ---@field importing? string ---@field optional? boolean ----@field packspecs table +---@field pkgs table ---@field names table local Spec = {} M.Spec = Spec @@ -35,7 +35,7 @@ function Spec.new(spec, opts) self.dirty = {} self.notifs = {} self.ignore_installed = {} - self.packspecs = {} + self.pkgs = {} self.optional = opts and opts.optional self.names = {} if spec then @@ -173,11 +173,11 @@ function Spec:add(plugin, results) end -- import the plugin's spec - if Config.options.packspec.enabled and plugin.dir and not self.packspecs[plugin.dir] then - self.packspecs[plugin.dir] = true - local packspec = Packspec.get(plugin) - if packspec then - self:normalize(packspec, nil, true) + if Config.options.pkg.enabled and plugin.dir and not self.pkgs[plugin.dir] then + self.pkgs[plugin.dir] = true + local pkg = Pkg.get_spec(plugin) + if pkg then + self:normalize(pkg, nil) end end diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 308930e..3e145c8 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -93,7 +93,7 @@ function M.install(opts) }, opts):wait(function() require("lazy.manage.lock").update() require("lazy.help").update() - require("lazy.core.packspec").update() + require("lazy.pkg").update() end) end @@ -119,7 +119,7 @@ function M.update(opts) }, opts):wait(function() require("lazy.manage.lock").update() require("lazy.help").update() - require("lazy.core.packspec").update() + require("lazy.pkg").update() end) end -- diff --git a/lua/lazy/manage/rocks.lua b/lua/lazy/manage/rocks.lua index efad65d..3e1bc6e 100644 --- a/lua/lazy/manage/rocks.lua +++ b/lua/lazy/manage/rocks.lua @@ -16,33 +16,32 @@ M.rocks = {} ---@param ... string ---@return string[] function M.args(...) - local ret = { "--tree", Config.rocks.tree, "--lua-version", "5.1" } + local ret = { + "--tree", + Config.rocks.tree, + "--server", + Config.options.rocks.server, + "--dev", + "--lua-version", + "5.1", + } vim.list_extend(ret, { ... }) return ret end -function M.parse(rockspec_file) - local rockspec = {} - local ret, err = loadfile(rockspec_file, "t", rockspec) - if not ret then - error(err) - end - ret() - return rockspec -end - --- dd(M.parse("/home/folke/.local/share/nvim/lazy/neorg/neorg-scm-1.rockspec")) - ---@param plugin LazyPlugin function M.get_rockspec(plugin) - assert(plugin.rocks and #plugin.rocks > 0, plugin.name .. " has no rocks") - local rockspec_file = Config.rocks.specs .. "/lazy-" .. plugin.name .. "-0.0-0.rockspec" + local rocks = vim.tbl_map(function(rock) + return rock.name + end, plugin._.rocks) + assert(rocks and #rocks > 0, plugin.name .. " has no rocks") + local rockspec_file = Config.rocks.specs .. "/lazy-" .. plugin.name .. "-scm-1.rockspec" require("lazy.util").write_file( rockspec_file, ([[ rockspec_format = "3.0" package = "lazy-%s" -version = "0.0-0" +version = "scm-1" source = { url = "%s" } dependencies = %s build = { type = "builtin" } @@ -78,9 +77,11 @@ function M.update_state() spec = spec, installed = installed[name] ~= nil, } - plugin._.rocks_installed = plugin._.rocks_installed and rock.installed - table.insert(plugin._.rocks, rock) - table.insert(rocks, rock) + if rock.name ~= "lua" then + plugin._.rocks_installed = plugin._.rocks_installed and rock.installed + table.insert(plugin._.rocks, rock) + table.insert(rocks, rock) + end end end end diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua new file mode 100644 index 0000000..f09afbc --- /dev/null +++ b/lua/lazy/pkg/init.lua @@ -0,0 +1,92 @@ +local Config = require("lazy.core.config") +local Util = require("lazy.util") + +local M = {} + +---@alias LazyPkgSpec LazySpec | fun():LazySpec + +---@class LazyPkg +---@field source string +---@field file string +---@field spec? LazySpec +---@field chunk? string|fun():LazySpec + +---@class LazyPkgSource +---@field get fun(plugin:LazyPlugin):LazyPkg + +---@type table? +M.cache = nil + +function M.update() + ---@type LazyPkgSource[] + local sources = {} + for _, s in ipairs(Config.options.pkg.sources) do + sources[#sources + 1] = require("lazy.pkg." .. s) + end + + ---@type table + local ret = {} + for _, plugin in pairs(Config.plugins) do + for _, source in ipairs(sources) do + local spec = source.get(plugin) + if spec then + if type(spec.chunk) == "function" then + spec.chunk = string.dump(spec.chunk) + end + ret[plugin.dir] = spec + break + end + end + end + local code = "return " .. Util.dump(ret) + Util.write_file(Config.options.pkg.cache, code) + M.cache = nil +end + +local function _load() + Util.track("pkg") + M.cache = {} + if vim.uv.fs_stat(Config.options.pkg.cache) then + Util.try(function() + local chunk, err = loadfile(Config.options.pkg.cache) + if not chunk then + error(err) + end + M.cache = chunk() + end, "Error loading pkg:") + end + Util.track() +end + +---@param plugin LazyPlugin +---@return LazyPkg? +function M.get(plugin) + if not M.cache then + _load() + end + + local ret = M.cache[plugin.dir] + if not ret then + return + end + + if ret.chunk and not ret.spec then + if type(ret.chunk) == "string" then + ret.chunk = load(ret.chunk, "@" .. plugin.dir) + end + ret.spec = ret.chunk() + ret.chunk = nil + end + + return ret +end + +---@param plugin LazyPlugin +---@return LazySpec? +function M.get_spec(plugin) + local pkg = M.get(plugin) + local spec = pkg and pkg.spec + return spec and type(spec) == "table" and vim.deepcopy(spec) or spec +end + +return M diff --git a/lua/lazy/pkg/lazy.lua b/lua/lazy/pkg/lazy.lua new file mode 100644 index 0000000..07b0491 --- /dev/null +++ b/lua/lazy/pkg/lazy.lua @@ -0,0 +1,28 @@ +local Util = require("lazy.util") + +local M = {} + +M.lazy_file = "lazy.lua" + +---@param plugin LazyPlugin +---@return LazyPkg? +function M.get(plugin) + local file = Util.norm(plugin.dir .. "/" .. M.lazy_file) + if Util.file_exists(file) then + ---@type fun(): LazySpec + local chunk = Util.try(function() + local ret, err = loadfile(file) + return err and error(err) or ret + end, "`" .. M.lazy_file .. "` for **" .. plugin.name .. "** has errors:") + if not chunk then + Util.error("Invalid `" .. M.lazy_file .. "` for **" .. plugin.name .. "**") + end + return { + source = "lazy", + file = M.lazy_file, + chunk = chunk, + } + end +end + +return M diff --git a/lua/lazy/pkg/packspec.lua b/lua/lazy/pkg/packspec.lua new file mode 100644 index 0000000..c9f2042 --- /dev/null +++ b/lua/lazy/pkg/packspec.lua @@ -0,0 +1,54 @@ +local Util = require("lazy.util") + +---@class PackSpec +---@field dependencies? table +---@field lazy? LazyPluginSpec +--- +local M = {} + +M.pkg_file = "pkg.json" + +---@param plugin LazyPlugin +---@return LazyPkg? +function M.get(plugin) + local file = Util.norm(plugin.dir .. "/" .. M.pkg_file) + if not Util.file_exists(file) then + return + end + ---@type PackSpec + local pkg = Util.try(function() + return vim.json.decode(Util.read_file(file)) + end, "`" .. M.pkg_file .. "` for **" .. plugin.name .. "** has errors:") + + if not pkg then + return + end + + ---@type LazySpec + local ret = {} + if pkg.dependencies then + for url, version in pairs(pkg.dependencies) do + -- HACK: Add `.git` to github urls + if url:find("github") and not url:match("%.git$") then + url = url .. ".git" + end + ret[#ret + 1] = { url = url, version = version } + end + end + local p = pkg.lazy + if p then + p.url = p.url or plugin.url + p.dir = p.dir or plugin.dir + ret[#ret + 1] = p + end + if pkg.lazy then + ret[#ret + 1] = pkg.lazy + end + return { + source = "lazy", + file = M.pkg_file, + spec = ret, + } +end + +return M diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua new file mode 100644 index 0000000..7a0c752 --- /dev/null +++ b/lua/lazy/pkg/rockspec.lua @@ -0,0 +1,55 @@ +--# selene:allow(incorrect_standard_library_use) + +local Util = require("lazy.core.util") + +local M = {} + +M.dev_suffix = "-scm-1.rockspec" +M.skip = { "lua" } + +---@class RockSpec +---@field rockspec_format string +---@field package string +---@field version string +---@field dependencies string[] + +---@param plugin LazyPlugin +---@return LazyPkg? +function M.get(plugin) + local rockspec_file ---@type string? + Util.ls(plugin.dir, function(path, name, t) + if t == "file" and name:sub(-#M.dev_suffix) == M.dev_suffix then + rockspec_file = path + return false + end + end) + + if not rockspec_file then + return + end + + ---@type RockSpec? + local rockspec = {} + local ret, err = loadfile(rockspec_file, "t", rockspec) + if not ret then + error(err) + end + ret() + return rockspec + and rockspec.package + and { + source = "rockspec", + file = rockspec_file, + spec = { + dir = plugin.dir, + url = plugin.url, + rocks = vim.tbl_filter(function(dep) + local name = dep:gsub("%s.*", "") + return not vim.tbl_contains(M.skip, name) + end, rockspec.dependencies), + }, + } + or nil +end + +return M diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 970b066..755c1cd 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -241,22 +241,21 @@ function M._dump(value, result) table.insert(result, value._raw) elseif t == "table" then table.insert(result, "{") - local i = 1 + for _, v in ipairs(value) do + M._dump(v, result) + table.insert(result, ",") + end ---@diagnostic disable-next-line: no-unknown for k, v in pairs(value) do - if k == i then - elseif type(k) == "string" then + if type(k) == "string" then if k:match("^[a-zA-Z]+$") then table.insert(result, ("%s="):format(k)) else table.insert(result, ("[%q]="):format(k)) end - else - table.insert(result, k .. "=") + M._dump(v, result) + table.insert(result, ",") end - M._dump(v, result) - table.insert(result, ",") - i = i + 1 end table.insert(result, "}") else diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index 13c5070..6b828a5 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -35,11 +35,11 @@ M.commands = { vim.cmd.checkhealth("lazy") end, pkg = function(opts) - local Pkg = require("lazy.core.packspec") + local Pkg = require("lazy.pkg") Pkg.update() require("lazy.manage.reloader").reload({ { - file = "packspec", --Config.options.packspec.path, + file = "pkg", what = "changed", }, }) From 8d35e60eeb83a53ad75399c38de4b5d044e5e15a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 18 Jun 2024 22:09:49 +0200 Subject: [PATCH 521/815] test: fix spec tests --- tests/core/plugin_spec.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index c15505f..548b5f5 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -52,7 +52,10 @@ describe("plugin spec url/name", function() local spec = Plugin.Spec.new(test[1]) local plugins = vim.tbl_values(spec.plugins) plugins[1]._ = {} - assert(#spec.notifs == 0) + local notifs = vim.tbl_filter(function(notif) + return notif.level > 3 + end, spec.notifs) + assert(#notifs == 0, vim.inspect(spec.notifs)) assert.equal(1, #plugins) plugins[1]._.super = nil assert.same(test[2], plugins[1]) From 75ffe56f70faac43f077796b91178d2f1419f8ce Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 22 Jun 2024 22:18:26 +0200 Subject: [PATCH 522/815] feat: rewrite of spec resolving --- lua/lazy/core/fragments.lua | 159 +++++++++++++++ lua/lazy/core/loader.lua | 8 +- lua/lazy/core/meta.lua | 245 +++++++++++++++++++++++ lua/lazy/core/plugin.lua | 375 +++-------------------------------- lua/lazy/core/util.lua | 2 +- lua/lazy/health.lua | 18 -- lua/lazy/types.lua | 51 +++-- tests/core/plugin_spec.lua | 128 ++++++++---- tests/handlers/keys_spec.lua | 1 + 9 files changed, 558 insertions(+), 429 deletions(-) create mode 100644 lua/lazy/core/fragments.lua create mode 100644 lua/lazy/core/meta.lua diff --git a/lua/lazy/core/fragments.lua b/lua/lazy/core/fragments.lua new file mode 100644 index 0000000..7096f55 --- /dev/null +++ b/lua/lazy/core/fragments.lua @@ -0,0 +1,159 @@ +local Config = require("lazy.core.config") + +local M = {} + +M._fid = 0 + +local function next_id() + M._fid = M._fid + 1 + return M._fid +end + +---@class LazyFragments +---@field fragments table +---@field frag_stack number[] +---@field dep_stack number[] +---@field dirty table +---@field spec LazySpecLoader +local F = {} + +---@param spec LazySpecLoader +---@return LazyFragments +function M.new(spec) + local self = setmetatable({}, { __index = F }) + self.fragments = {} + self.frag_stack = {} + self.dep_stack = {} + self.spec = spec + self.dirty = {} + return self +end + +---@param id number +function F:get(id) + return self.fragments[id] +end + +---@param id number +function F:del(id) + -- del fragment + local fragment = self.fragments[id] + if not fragment then + return + end + + self.dirty[id] = true + + -- remove from parent + local pid = fragment.pid + if pid then + local parent = self.fragments[pid] + if parent.frags then + ---@param fid number + parent.frags = vim.tbl_filter(function(fid) + return fid ~= id + end, parent.frags) + end + if parent.deps then + ---@param fid number + parent.deps = vim.tbl_filter(function(fid) + return fid ~= id + end, parent.deps) + end + self.dirty[pid] = true + end + + -- remove children + if fragment.frags then + for _, fid in ipairs(fragment.frags) do + self:del(fid) + end + end + + self.fragments[id] = nil +end + +---@param plugin LazyPluginSpec +function F:add(plugin) + local id = next_id() + + local pid = self.frag_stack[#self.frag_stack] + + ---@type LazyFragment + local fragment = { + id = id, + pid = pid, + name = plugin.name, + url = plugin.url, + dir = plugin.dir, + spec = plugin --[[@as LazyPlugin]], + } + + -- short url / ref + if plugin[1] then + local slash = plugin[1]:find("/", 1, true) + if slash then + local prefix = plugin[1]:sub(1, 4) + if prefix == "http" or prefix == "git@" then + fragment.url = fragment.url or plugin[1] + else + fragment.name = fragment.name or plugin[1]:sub(slash + 1) + fragment.url = fragment.url or Config.options.git.url_format:format(plugin[1]) + end + else + fragment.name = fragment.name or plugin[1] + end + end + + -- name + fragment.name = fragment.name + or fragment.url and self.spec.get_name(fragment.url) + or fragment.dir and self.spec.get_name(fragment.dir) + if not fragment.name then + return self.spec:error("Invalid plugin spec " .. vim.inspect(plugin)) + end + + if type(plugin.config) == "table" then + self.spec:warn( + "{" .. fragment.name .. "}: setting a table to `Plugin.config` is deprecated. Please use `Plugin.opts` instead" + ) + ---@diagnostic disable-next-line: assign-type-mismatch + plugin.opts = plugin.config + plugin.config = nil + end + + self.fragments[id] = fragment + + -- add to parent + if pid then + local parent = self.fragments[pid] + parent.frags = parent.frags or {} + table.insert(parent.frags, id) + end + + -- add to parent's deps + local did = self.dep_stack[#self.dep_stack] + if did and did == pid then + fragment.dep = true + local parent = self.fragments[did] + parent.deps = parent.deps or {} + table.insert(parent.deps, id) + end + + table.insert(self.frag_stack, id) + -- dependencies + if plugin.dependencies then + table.insert(self.dep_stack, id) + self.spec:normalize(plugin.dependencies) + table.remove(self.dep_stack) + end + -- child specs + if plugin.specs then + self.spec:normalize(plugin.specs) + end + table.remove(self.frag_stack) + + return fragment +end + +return M diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index ffd8753..a0233ad 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -105,7 +105,7 @@ function M.startup() M.source(vim.env.VIMRUNTIME .. "/filetype.lua") -- backup original rtp - local rtp = vim.opt.rtp:get() + local rtp = vim.opt.rtp:get() --[[@as string[] ]] -- 1. run plugin init Util.track({ start = "init" }) @@ -136,7 +136,7 @@ function M.startup() if not path:find("after/?$") then -- these paths don't will already have their ftdetect ran, -- by sourcing filetype.lua above, so skip them - M.did_ftdetect[path] = true + M.did_ftdetect[path] = path M.packadd(path) end end @@ -144,7 +144,9 @@ function M.startup() -- 4. load after plugins Util.track({ start = "after" }) - for _, path in ipairs(vim.opt.rtp:get()) do + for _, path in + ipairs(vim.opt.rtp:get() --[[@as string[] ]]) + do if path:find("after/?$") then M.source_runtime(path, "plugin") end diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua new file mode 100644 index 0000000..9c40238 --- /dev/null +++ b/lua/lazy/core/meta.lua @@ -0,0 +1,245 @@ +local Config = require("lazy.core.config") +local Util = require("lazy.core.util") + +---@class LazyMeta +---@field plugins table +---@field str_to_meta table +---@field frag_to_meta table +---@field dirty table +---@field spec LazySpecLoader +---@field fragments LazyFragments +local M = {} + +---@param spec LazySpecLoader +---@return LazyMeta +function M.new(spec) + local self = setmetatable({}, { __index = M }) + self.spec = spec + self.fragments = require("lazy.core.fragments").new(spec) + self.plugins = {} + self.frag_to_meta = {} + self.str_to_meta = {} + self.dirty = {} + return self +end + +---@param name string +function M:del(name) + local meta = self.plugins[name] + if not meta then + return + end + for _, fid in ipairs(meta._.frags or {}) do + self.fragments:del(fid) + end + self.plugins[name] = nil +end + +---@param plugin LazyPluginSpec +function M:add(plugin) + local fragment = self.fragments:add(plugin) + if not fragment then + return + end + + local meta = self.plugins[fragment.name] + or fragment.url and self.str_to_meta[fragment.url] + or fragment.dir and self.str_to_meta[fragment.dir] + + if not meta then + meta = { name = fragment.name, _ = { frags = {} } } + local url, dir = fragment.url, fragment.dir + -- add to index + if url then + self.str_to_meta[url] = meta + end + if dir then + self.str_to_meta[dir] = meta + end + end + + table.insert(meta._.frags, fragment.id) + + if plugin.name then + -- handle renames + if meta.name ~= plugin.name then + self.plugins[meta.name] = nil + meta.name = plugin.name + end + end + + self.plugins[meta.name] = meta + self.frag_to_meta[fragment.id] = meta + self.dirty[meta.name] = true +end + +function M:rebuild() + for fid in pairs(self.fragments.dirty) do + local meta = self.frag_to_meta[fid] + if meta then + if self.fragments:get(fid) then + -- fragment still exists, so mark plugin as dirty + self.dirty[meta.name] = true + else + -- fragment was deleted, so remove it from plugin + ---@param f number + meta._.frags = vim.tbl_filter(function(f) + return f ~= fid + end, meta._.frags) + -- if no fragments left, delete plugin + if #meta._.frags == 0 then + self:del(meta.name) + else + self.dirty[meta.name] = true + end + end + end + end + self.fragments.dirty = {} + for n, _ in pairs(self.dirty) do + self:_rebuild(n) + end +end + +---@param name string +function M:_rebuild(name) + local plugin = self.plugins[name] + if not plugin or #plugin._.frags == 0 then + self.plugins[name] = nil + return + end + setmetatable(plugin, nil) + plugin.dependencies = {} + + local super = nil + plugin.url = nil + plugin._.dep = true + plugin.optional = true + + assert(#plugin._.frags > 0, "no fragments found for plugin " .. name) + + for _, fid in ipairs(plugin._.frags) do + local fragment = self.fragments:get(fid) + assert(fragment, "fragment " .. fid .. " not found, for plugin " .. name) + ---@diagnostic disable-next-line: no-unknown + super = setmetatable(fragment.spec, super and { __index = super } or nil) + plugin._.dep = plugin._.dep and fragment.dep + plugin.optional = plugin.optional and (rawget(fragment.spec, "optional") == true) + plugin.url = fragment.url or plugin.url + + -- dependencies + for _, dep in ipairs(fragment.deps or {}) do + table.insert(plugin.dependencies, self.fragments:get(dep).name) + end + end + + super = super or {} + + -- dir / dev + plugin.dev = super.dev + plugin.dir = super.dir + if plugin.dir then + plugin.dir = Util.norm(plugin.dir) + else + if plugin.dev == nil and plugin.url then + for _, pattern in ipairs(Config.options.dev.patterns) do + if plugin.url:find(pattern, 1, true) then + plugin.dev = true + break + end + end + end + if plugin.dev == true then + local dev_dir = type(Config.options.dev.path) == "string" and Config.options.dev.path .. "/" .. plugin.name + or Util.norm(Config.options.dev.path(plugin)) + if not Config.options.dev.fallback or vim.fn.isdirectory(dev_dir) == 1 then + plugin.dir = dev_dir + else + plugin.dev = false + end + end + plugin.dir = plugin.dir or Config.options.root .. "/" .. plugin.name + end + + if #plugin.dependencies == 0 and not super.dependencies then + plugin.dependencies = nil + end + if not plugin.optional and not super.optional then + plugin.optional = nil + end + setmetatable(plugin, { __index = super }) + + self.dirty[plugin.name] = nil + return plugin +end + +---@param plugin LazyPlugin +function M:disable(plugin) + plugin._.kind = "disabled" + self:del(plugin.name) + self.spec.disabled[plugin.name] = plugin +end + +function M:fix_cond() + for _, plugin in pairs(self.plugins) do + local cond = plugin.cond + if cond == nil then + cond = Config.options.defaults.cond + end + if cond == false or (type(cond) == "function" and not cond(plugin)) then + plugin._.cond = false + local stack = { plugin } + while #stack > 0 do + local p = table.remove(stack) --[[@as LazyPlugin]] + if not self.spec.ignore_installed[p.name] then + for _, dep in ipairs(p.dependencies or {}) do + table.insert(stack, self.plugins[dep]) + end + self.spec.ignore_installed[p.name] = true + end + end + plugin.enabled = false + end + end +end + +function M:fix_optional() + if self.spec.optional then + return 0 + end + local changes = 0 + for _, plugin in pairs(self.plugins) do + if plugin.optional then + changes = changes + 1 + self:del(plugin.name) + end + end + self:rebuild() + return changes +end + +function M:fix_disabled() + local changes = 0 + for _, plugin in pairs(self.plugins) do + if plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled()) then + changes = changes + 1 + self:disable(plugin) + end + end + self:rebuild() + return changes +end + +function M:fix() + Util.track("resolve plugins") + self:rebuild() + + self:fix_cond() + + -- selene: allow(empty_loop) + while self:fix_disabled() + self:fix_optional() > 0 do + end + Util.track() +end + +return M diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index de6d228..6aec6f1 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -1,4 +1,5 @@ local Config = require("lazy.core.config") +local Meta = require("lazy.core.meta") local Pkg = require("lazy.pkg") local Util = require("lazy.core.util") @@ -7,46 +8,49 @@ local M = {} M.loading = false ---@class LazySpecLoader +---@field meta LazyMeta ---@field plugins table ----@field fragments table ---@field disabled table ----@field dirty table ---@field ignore_installed table ---@field modules string[] ---@field notifs {msg:string, level:number, file?:string}[] ---@field importing? string ---@field optional? boolean ---@field pkgs table ----@field names table local Spec = {} M.Spec = Spec -M.last_fid = 0 -M.fid_stack = {} ---@type number[] M.LOCAL_SPEC = ".lazy.lua" ---@param spec? LazySpec ---@param opts? {optional?:boolean} function Spec.new(spec, opts) - local self = setmetatable({}, { __index = Spec }) - self.plugins = {} - self.fragments = {} + local self = setmetatable({}, Spec) + self.meta = Meta.new(self) self.disabled = {} self.modules = {} - self.dirty = {} self.notifs = {} self.ignore_installed = {} self.pkgs = {} self.optional = opts and opts.optional - self.names = {} if spec then self:parse(spec) end return self end +function Spec:__index(key) + if Spec[key] then + return Spec[key] + end + if key == "plugins" then + self.meta:rebuild() + return self.meta.plugins + end +end + function Spec:parse(spec) self:normalize(spec) - self:fix_disabled() + self.meta:fix() end -- PERF: optimized code to get package name without using lua patterns @@ -58,136 +62,22 @@ function Spec.get_name(pkg) return slash and name:sub(#name - slash + 2) or pkg:gsub("%W+", "_") end ----@param plugin LazyPlugin ----@param results? string[] -function Spec:add(plugin, results) - -- check if we already processed this spec. Can happen when a user uses the same instance of a spec in multiple specs - -- see https://github.com/folke/lazy.nvim/issues/45 - if rawget(plugin, "_") then - if results then - table.insert(results, plugin.name) - end - return plugin - end +---@param plugin LazyPluginSpec +function Spec:add(plugin) + self.meta:add(plugin) - local is_ref = plugin[1] and not plugin[1]:find("/", 1, true) - - if not plugin.url and not is_ref and plugin[1] then - local prefix = plugin[1]:sub(1, 4) - if prefix == "http" or prefix == "git@" then - plugin.url = plugin[1] - else - plugin.url = Config.options.git.url_format:format(plugin[1]) - end - end - - ---@type string? - local dir - - if plugin.dir then - dir = Util.norm(plugin.dir) - -- local plugin - plugin.name = plugin.name or Spec.get_name(plugin.dir) - elseif plugin.url then - if plugin.name then - self.names[plugin.url] = plugin.name - local name = Spec.get_name(plugin.url) - if name and self.plugins[name] then - self.plugins[name].name = plugin.name - self.plugins[plugin.name] = self.plugins[name] - self.plugins[name] = nil - end - else - plugin.name = self.names[plugin.url] or Spec.get_name(plugin.url) - end - -- check for dev plugins - if plugin.dev == nil then - for _, pattern in ipairs(Config.options.dev.patterns) do - if plugin.url:find(pattern, 1, true) then - plugin.dev = true - break - end - end - end - elseif is_ref then - plugin.name = plugin[1] - else - self:error("Invalid plugin spec " .. vim.inspect(plugin)) - return - end - - if not plugin.name or plugin.name == "" then - self:error("Plugin spec " .. vim.inspect(plugin) .. " has no name") - return - end - - -- dev plugins - 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 - -- explicitly select the default path - dir = Config.options.root .. "/" .. plugin.name - end - - if type(plugin.config) == "table" then - self:warn( - "{" .. plugin.name .. "}: setting a table to `Plugin.config` is deprecated. Please use `Plugin.opts` instead" - ) - ---@diagnostic disable-next-line: assign-type-mismatch - plugin.opts = plugin.config - plugin.config = nil - end - - local fpid = M.fid_stack[#M.fid_stack] - - M.last_fid = M.last_fid + 1 - plugin._ = { - dir = dir, - fid = M.last_fid, - fpid = fpid, - dep = fpid ~= nil, - module = self.importing, - } - self.fragments[plugin._.fid] = plugin - -- remote plugin - plugin.dir = plugin._.dir or (plugin.name and (Config.options.root .. "/" .. plugin.name)) or nil - - if fpid then - local parent = self.fragments[fpid] - parent._.fdeps = parent._.fdeps or {} - table.insert(parent._.fdeps, plugin._.fid) - end - - if plugin.dependencies then - table.insert(M.fid_stack, plugin._.fid) - plugin.dependencies = self:normalize(plugin.dependencies, {}) - table.remove(M.fid_stack) - end + ---@diagnostic disable-next-line: cast-type-mismatch + ---@cast plugin LazyPlugin -- import the plugin's spec if Config.options.pkg.enabled and plugin.dir and not self.pkgs[plugin.dir] then self.pkgs[plugin.dir] = true local pkg = Pkg.get_spec(plugin) if pkg then - self:normalize(pkg, nil) + self:normalize(pkg) end end - if self.plugins[plugin.name] then - plugin = self:merge(self.plugins[plugin.name], plugin) - end - self.plugins[plugin.name] = plugin - if results then - table.insert(results, plugin.name) - end return plugin end @@ -199,166 +89,6 @@ function Spec:warn(msg) self:log(msg, vim.log.levels.WARN) end ---- Rebuilds a plugin spec excluding any removed fragments ----@param name? string -function Spec:rebuild(name) - if not name then - for n, _ in pairs(self.dirty) do - self:rebuild(n) - end - self.dirty = {} - end - local plugin = self.plugins[name] - if not plugin then - return - end - - local fragments = {} ---@type LazyPlugin[] - - repeat - local super = plugin._.super - if self.fragments[plugin._.fid] then - plugin._.dep = plugin._.fpid ~= nil - plugin._.super = nil - if plugin._.fdeps then - plugin.dependencies = {} - for _, cid in ipairs(plugin._.fdeps) do - if self.fragments[cid] then - table.insert(plugin.dependencies, self.fragments[cid].name) - end - end - end - setmetatable(plugin, nil) - table.insert(fragments, 1, plugin) - end - plugin = super - until not plugin - - if #fragments == 0 then - self.plugins[name] = nil - return - end - - plugin = fragments[1] - for i = 2, #fragments do - plugin = self:merge(plugin, fragments[i]) - end - self.plugins[name] = plugin -end - ---- Recursively removes all fragments from a plugin spec or a given fragment ----@param id string|number Plugin name or fragment id ----@param opts {self: boolean} -function Spec:remove_fragments(id, opts) - local fids = {} ---@type number[] - - if type(id) == "number" then - fids[1] = id - else - local plugin = self.plugins[id] - repeat - if plugin._.fpid then - local parent = self.fragments[plugin._.fpid] - if parent then - parent._.fdeps = vim.tbl_filter(function(fid) - return fid ~= plugin._.fid - end, parent._.fdeps) - self.dirty[parent.name] = true - end - end - fids[#fids + 1] = plugin._.fid - plugin = plugin._.super - until not plugin - end - - for _, fid in ipairs(fids) do - local fragment = self.fragments[fid] - if fragment then - for _, cid in ipairs(fragment._.fdeps or {}) do - self:remove_fragments(cid, { self = true }) - end - if opts.self then - self.fragments[fid] = nil - end - self.dirty[fragment.name] = true - end - end -end - -function Spec:fix_cond() - for _, plugin in pairs(self.plugins) do - local cond = plugin.cond - if cond == nil then - cond = Config.options.defaults.cond - end - if cond == false or (type(cond) == "function" and not cond(plugin)) then - plugin._.cond = false - local stack = { plugin } - while #stack > 0 do - local p = table.remove(stack) - if not self.ignore_installed[p.name] then - for _, dep in ipairs(p.dependencies or {}) do - table.insert(stack, self.plugins[dep]) - end - self.ignore_installed[p.name] = true - end - end - plugin.enabled = false - end - end -end - -function Spec:fix_optional() - if not self.optional then - ---@param plugin LazyPlugin - local function all_optional(plugin) - return (not plugin) or (rawget(plugin, "optional") and all_optional(plugin._.super)) - end - - -- handle optional plugins - for _, plugin in pairs(self.plugins) do - if plugin.optional and all_optional(plugin) then - -- remove all optional fragments - self:remove_fragments(plugin.name, { self = true }) - self.plugins[plugin.name] = nil - end - end - end -end - -function Spec:fix_disabled() - for _, plugin in pairs(self.plugins) do - if not plugin.name or not plugin.dir then - self:error("Plugin spec for **" .. plugin.name .. "** not found.\n```lua\n" .. vim.inspect(plugin) .. "\n```") - self.plugins[plugin.name] = nil - end - end - - self:fix_optional() - self:rebuild() - - self:fix_cond() - self:rebuild() - - self.dirty = {} - - for _, plugin in pairs(self.plugins) do - local disabled = plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled()) - if disabled then - plugin._.kind = "disabled" - -- remove all child fragments - self:remove_fragments(plugin.name, { self = false }) - self.plugins[plugin.name] = nil - self.disabled[plugin.name] = plugin - end - end - self:rebuild() - - -- check optional plugins again - self:fix_optional() - self:rebuild() -end - ---@param msg string ---@param level number function Spec:log(msg, level) @@ -378,25 +108,17 @@ function Spec:report(level) end ---@param spec LazySpec|LazySpecImport ----@param results? string[] -function Spec:normalize(spec, results) +function Spec:normalize(spec) if type(spec) == "string" then - if not spec:find("/", 1, true) then - -- spec is a plugin name - if results then - table.insert(results, spec) - end - else - self:add({ spec }, results) - end + self:add({ spec }) elseif #spec > 1 or Util.is_list(spec) then ---@cast spec LazySpec[] for _, s in ipairs(spec) do - self:normalize(s, results) + self:normalize(s) end elseif spec[1] or spec.dir or spec.url then - ---@cast spec LazyPlugin - local plugin = self:add(spec, results) + ---@cast spec LazyPluginSpec + local plugin = self:add(spec) ---@diagnostic disable-next-line: cast-type-mismatch ---@cast plugin LazySpecImport if plugin and plugin.import then @@ -408,7 +130,6 @@ function Spec:normalize(spec, results) else self:error("Invalid plugin spec " .. vim.inspect(spec)) end - return results end ---@param spec LazySpecImport @@ -492,41 +213,6 @@ function Spec:import(spec) end end ----@param old LazyPlugin ----@param new LazyPlugin ----@return LazyPlugin -function Spec:merge(old, new) - new._.dep = old._.dep and new._.dep - - if new.url and old.url and new.url ~= old.url then - self:warn("Two plugins with the same name and different url:\n" .. vim.inspect({ old = old, new = new })) - end - - if new.dependencies and old.dependencies then - Util.extend(new.dependencies, old.dependencies) - end - - local new_dir = new._.dir or old._.dir or (new.name and (Config.options.root .. "/" .. new.name)) or nil - if new_dir ~= old.dir then - local msg = "Plugin `" .. new.name .. "` changed `dir`:\n- from: `" .. old.dir .. "`\n- to: `" .. new_dir .. "`" - if new._.rtp_loaded or old._.rtp_loaded then - msg = msg - .. "\n\nThis plugin was already partially loaded, so we did not change it's `dir`.\nPlease fix your config." - self:error(msg) - new_dir = old.dir - else - self:warn(msg) - end - end - new.dir = new_dir - new._.rtp_loaded = new._.rtp_loaded or old._.rtp_loaded - - new._.super = old - setmetatable(new, { __index = old }) - - return new -end - function M.update_state() ---@type string[] local cloning = {} @@ -631,6 +317,7 @@ function M.load() Config.spec = Spec.new() local specs = { + ---@diagnostic disable-next-line: param-type-mismatch vim.deepcopy(Config.options.spec), } specs[#specs + 1] = M.find_local_spec() @@ -655,10 +342,10 @@ function M.load() for name, plugin in pairs(existing) do if Config.plugins[name] then local dep = Config.plugins[name]._.dep - local super = Config.plugins[name]._.super + local frags = Config.plugins[name]._.frags Config.plugins[name]._ = plugin._ Config.plugins[name]._.dep = dep - Config.plugins[name]._.super = super + Config.plugins[name]._.frags = frags end end Util.track() @@ -725,8 +412,9 @@ function M._values(root, plugin, prop, is_list) if not plugin[prop] then return {} end + local super = getmetatable(plugin) ---@type table - local ret = plugin._.super and M._values(root, plugin._.super, prop, is_list) or {} + local ret = super and M._values(root, super.__index, prop, is_list) or {} local values = rawget(plugin, prop) if not values then @@ -742,6 +430,7 @@ function M._values(root, plugin, prop, is_list) else ---@type {path:string[], list:any[]}[] local lists = {} + ---@diagnostic disable-next-line: no-unknown for _, key in ipairs(plugin[prop .. "_extend"] or {}) do local path = vim.split(key, ".", { plain = true }) local r = Util.key_get(ret, path) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index f72ab21..d4fa47c 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -93,7 +93,7 @@ function M.pretty_trace(opts) end ---@generic R ----@param fn fun():R +---@param fn fun():R? ---@param opts? string|{msg:string, on_error:fun(msg)} ---@return R function M.try(fn, opts) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 7b06f1d..6202de6 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -59,7 +59,6 @@ function M.check() else for _, plugin in pairs(spec.plugins) do M.check_valid(plugin) - M.check_override(plugin) end if #spec.notifs > 0 then error("Issues were reported when loading your specs:") @@ -88,23 +87,6 @@ function M.check_valid(plugin) end end ----@param plugin LazyPlugin -function M.check_override(plugin) - if not plugin._.super then - return - end - - local Handler = require("lazy.core.handler") - local skip = { "dependencies", "_", "opts", 1 } - vim.list_extend(skip, vim.tbl_values(Handler.types)) - - for key, value in pairs(plugin._.super) do - if not vim.tbl_contains(skip, key) and plugin[key] and plugin[key] ~= value then - warn("{" .. plugin.name .. "}: overriding <" .. key .. ">") - end - end -end - M.valid = { 1, "_", diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 831327e..dabfa58 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -2,30 +2,26 @@ ---@alias LazyPluginKind "normal"|"clean"|"disabled" ---@class LazyPluginState ----@field fid number id of the plugin spec fragment ----@field fpid? number parent id of the plugin spec fragment ----@field fdeps? number[] children ids of the fragment ----@field loaded? {[string]:string}|{time:number} ----@field installed? boolean ----@field tasks? LazyTask[] ----@field working? boolean ----@field dirty? boolean ----@field updated? {from:string, to:string} ----@field is_local? boolean ----@field updates? {from:GitInfo, to:GitInfo} ----@field cloned? boolean ----@field outdated? boolean ----@field kind? LazyPluginKind ----@field dep? boolean True if this plugin is only in the spec as a dependency ----@field cond? boolean ----@field super? LazyPlugin ----@field module? string ----@field dir? string Explicit dir or dev set for this plugin ----@field rtp_loaded? boolean ----@field handlers? LazyPluginHandlers ---@field cache? table +---@field cloned? boolean +---@field cond? boolean +---@field dep? boolean True if this plugin is only in the spec as a dependency +---@field dir? string Explicit dir or dev set for this plugin +---@field dirty? boolean +---@field frags? number[] +---@field handlers? LazyPluginHandlers +---@field installed? boolean +---@field is_local? boolean +---@field kind? LazyPluginKind +---@field loaded? {[string]:string}|{time:number} +---@field outdated? boolean ---@field rocks? LazyRock[] ---@field rocks_installed? boolean +---@field rtp_loaded? boolean +---@field tasks? LazyTask[] +---@field updated? {from:string, to:string} +---@field updates? {from:GitInfo, to:GitInfo} +---@field working? boolean ---@alias PluginOpts table|fun(self:LazyPlugin, opts:table):table? @@ -66,6 +62,7 @@ ---@class LazyPlugin: LazyPluginBase,LazyPluginHandlers,LazyPluginHooks,LazyPluginRef ---@field dependencies? string[] +---@field specs? string|string[]|LazyPluginSpec[] ---@field _ LazyPluginState ---@class LazyPluginSpecHandlers @@ -77,6 +74,7 @@ ---@class LazyPluginSpec: LazyPluginBase,LazyPluginSpecHandlers,LazyPluginHooks,LazyPluginRef ---@field dependencies? string|string[]|LazyPluginSpec[] +---@field specs? string|string[]|LazyPluginSpec[] ---@alias LazySpec string|LazyPluginSpec|LazySpecImport|LazySpec[] @@ -85,3 +83,14 @@ ---@field name? string ---@field enabled? boolean|(fun():boolean) ---@field cond? boolean|(fun():boolean) + +---@class LazyFragment +---@field id number +---@field pid? number +---@field deps? number[] +---@field frags? number[] +---@field dep? boolean +---@field name string +---@field url? string +---@field dir? string +---@field spec LazyPlugin diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index 548b5f5..4a09bb9 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -6,6 +6,10 @@ local assert = require("luassert") Config.setup() +local function inspect(obj) + return vim.inspect(obj):gsub("%s+", " ") +end + ---@param plugins LazyPlugin[]|LazyPlugin local function clean(plugins) local p = plugins @@ -14,6 +18,7 @@ local function clean(plugins) plugin._.fid = nil plugin._.fpid = nil plugin._.fdeps = nil + plugin._.frags = nil if plugin._.dep == false then plugin._.dep = nil end @@ -28,7 +33,7 @@ describe("plugin spec url/name", function() { { "foo/bar" }, { [1] = "foo/bar", name = "bar", url = "https://github.com/foo/bar.git" } }, { { "https://foo.bar" }, { [1] = "https://foo.bar", name = "foo.bar", url = "https://foo.bar" } }, { { "foo/bar", name = "foobar" }, { [1] = "foo/bar", name = "foobar", url = "https://github.com/foo/bar.git" } }, - { { "foo/bar", url = "123" }, { [1] = "foo/bar", name = "123", url = "123" } }, + { { "foo/bar", url = "123" }, { [1] = "foo/bar", name = "bar", url = "123" } }, { { url = "https://foobar" }, { name = "foobar", url = "https://foobar" } }, { { { url = "https://foo", name = "foobar" }, { url = "https://foo" } }, @@ -45,18 +50,22 @@ describe("plugin spec url/name", function() for _, test in ipairs(tests) do test[2]._ = {} - it("parses " .. vim.inspect(test[1]):gsub("%s+", " "), function() + it("parses " .. inspect(test[1]), function() if not test[2].dir then test[2].dir = Config.options.root .. "/" .. test[2].name end local spec = Plugin.Spec.new(test[1]) - local plugins = vim.tbl_values(spec.plugins) - plugins[1]._ = {} + local all = vim.deepcopy(spec.plugins) + local plugins = vim.tbl_values(all) + plugins = vim.tbl_map(function(plugin) + plugin._ = {} + return plugin + end, plugins) local notifs = vim.tbl_filter(function(notif) return notif.level > 3 end, spec.notifs) assert(#notifs == 0, vim.inspect(spec.notifs)) - assert.equal(1, #plugins) + assert.equal(1, #plugins, vim.inspect(all)) plugins[1]._.super = nil assert.same(test[2], plugins[1]) end) @@ -90,7 +99,40 @@ describe("plugin spec dir", function() for _, test in ipairs(tests) do local dir = vim.fn.expand(test[1]) local input = vim.list_slice(test, 2) - it("parses dir " .. vim.inspect(input):gsub("%s+", " "), function() + it("parses dir " .. inspect(input), function() + local spec = Plugin.Spec.new(input) + local plugins = vim.tbl_values(spec.plugins) + assert(spec:report() == 0) + assert.equal(1, #plugins) + assert.same(dir, plugins[1].dir) + end) + end +end) + +describe("plugin dev", function() + local tests = { + { + { "lewis6991/gitsigns.nvim", opts = {}, dev = true }, + { "lewis6991/gitsigns.nvim" }, + }, + { + { "lewis6991/gitsigns.nvim", opts = {}, dev = true }, + { "gitsigns.nvim" }, + }, + { + { "lewis6991/gitsigns.nvim", opts = {} }, + { "lewis6991/gitsigns.nvim", dev = true }, + }, + { + { "lewis6991/gitsigns.nvim", opts = {} }, + { "gitsigns.nvim", dev = true }, + }, + } + + for _, test in ipairs(tests) do + local dir = vim.fn.expand("~/projects/gitsigns.nvim") + local input = test + it("parses dir " .. inspect(input), function() local spec = Plugin.Spec.new(input) local plugins = vim.tbl_values(spec.plugins) assert(spec:report() == 0) @@ -126,7 +168,7 @@ describe("plugin spec opt", function() for _, plugin in pairs(spec.plugins) do plugin.dir = nil end - assert.same(clean(spec.plugins), { + assert.same({ bar = { "foo/bar", _ = {}, @@ -150,7 +192,7 @@ describe("plugin spec opt", function() name = "dep2", url = "https://github.com/foo/dep2.git", }, - }) + }, clean(spec.plugins)) end end) @@ -369,45 +411,45 @@ describe("plugin spec opt", function() end) describe("plugin opts", function() - it("correctly parses opts", function() - ---@type {spec:LazySpec, opts:table}[] - local tests = { - { - spec = { { "foo/foo", opts = { a = 1, b = 1 } }, { "foo/foo", opts = { a = 2 } } }, - opts = { a = 2, b = 1 }, - }, - { - spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo", opts = { a = 2 } } }, - opts = { a = 2, b = 1 }, - }, - { - spec = { { "foo/foo", opts = { a = 1, b = 1 } }, { "foo/foo", config = { a = 2 } } }, - opts = { a = 2, b = 1 }, - }, - { - spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo", config = { a = 2 } } }, - opts = { a = 2, b = 1 }, - }, - { - spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo", config = { a = vim.NIL } } }, - opts = { b = 1 }, - }, - { - spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo" } }, - opts = { a = 1, b = 1 }, - }, - { - spec = { { "foo/foo" }, { "foo/foo" } }, - opts = {}, - }, - } + ---@type {spec:LazySpec, opts:table}[] + local tests = { + { + spec = { { "foo/foo", opts = { a = 1, b = 1 } }, { "foo/foo", opts = { a = 2 } } }, + opts = { a = 2, b = 1 }, + }, + { + spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo", opts = { a = 2 } } }, + opts = { a = 2, b = 1 }, + }, + { + spec = { { "foo/foo", opts = { a = 1, b = 1 } }, { "foo/foo", config = { a = 2 } } }, + opts = { a = 2, b = 1 }, + }, + { + spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo", config = { a = 2 } } }, + opts = { a = 2, b = 1 }, + }, + { + spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo", config = { a = vim.NIL } } }, + opts = { b = 1 }, + }, + { + spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo" } }, + opts = { a = 1, b = 1 }, + }, + { + spec = { { "foo/foo" }, { "foo/foo" } }, + opts = {}, + }, + } - for _, test in ipairs(tests) do + for _, test in ipairs(tests) do + it("correctly parses opts for " .. inspect(test.spec), function() local spec = Plugin.Spec.new(test.spec) assert(spec.plugins.foo) assert.same(test.opts, Plugin.values(spec.plugins.foo, "opts")) - end - end) + end) + end end) describe("plugin spec", function() diff --git a/tests/handlers/keys_spec.lua b/tests/handlers/keys_spec.lua index 6254db8..d6a9df4 100644 --- a/tests/handlers/keys_spec.lua +++ b/tests/handlers/keys_spec.lua @@ -1,3 +1,4 @@ +---@module 'luassert' local Keys = require("lazy.core.handler.keys") describe("keys", function() From c1912e23481ba72a8d8f7a5c736f5e2547e6853e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 22 Jun 2024 22:18:47 +0200 Subject: [PATCH 523/815] feat(pkg): import package specs in the scope of the plugin --- lua/lazy/pkg/init.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index f09afbc..9858ad7 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -86,7 +86,11 @@ end function M.get_spec(plugin) local pkg = M.get(plugin) local spec = pkg and pkg.spec - return spec and type(spec) == "table" and vim.deepcopy(spec) or spec + if not spec then + return + end + spec = type(spec) == "table" and vim.deepcopy(spec) or spec + return { plugin.name, specs = spec } end return M From d2bea9eefd1d99d3bfeebd0c848fa62488ef0461 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 22 Jun 2024 22:30:20 +0200 Subject: [PATCH 524/815] docs: added doc comments --- lua/lazy/core/fragments.lua | 7 +++++++ lua/lazy/core/meta.lua | 22 +++++++++++++++++++++- lua/lazy/core/plugin.lua | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/fragments.lua b/lua/lazy/core/fragments.lua index 7096f55..1ca018c 100644 --- a/lua/lazy/core/fragments.lua +++ b/lua/lazy/core/fragments.lua @@ -9,6 +9,9 @@ local function next_id() return M._fid end +--- This class is used to manage the fragments of a plugin spec. +--- It keeps track of the fragments and their relations to other fragments. +--- A fragment can be a dependency (dependencies) or a child (specs) of another fragment. ---@class LazyFragments ---@field fragments table ---@field frag_stack number[] @@ -34,6 +37,8 @@ function F:get(id) return self.fragments[id] end +--- Remove a fragment and all its children. +--- This will also remove the fragment from its parent's children list. ---@param id number function F:del(id) -- del fragment @@ -73,6 +78,8 @@ function F:del(id) self.fragments[id] = nil end +--- Add a fragment to the fragments list. +--- This also resolves its name, url, dir, dependencies and child specs. ---@param plugin LazyPluginSpec function F:add(plugin) local id = next_id() diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 9c40238..35006d7 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -1,6 +1,8 @@ local Config = require("lazy.core.config") local Util = require("lazy.core.util") +--- This class is used to manage the plugins. +--- A plugin is a collection of fragments that are related to each other. ---@class LazyMeta ---@field plugins table ---@field str_to_meta table @@ -23,6 +25,7 @@ function M.new(spec) return self end +--- Remove a plugin and all its fragments. ---@param name string function M:del(name) local meta = self.plugins[name] @@ -35,6 +38,9 @@ function M:del(name) self.plugins[name] = nil end +--- Add a fragment to a plugin. +--- This will create a new plugin if it does not exist. +--- It also keeps track of renames. ---@param plugin LazyPluginSpec function M:add(plugin) local fragment = self.fragments:add(plugin) @@ -73,6 +79,8 @@ function M:add(plugin) self.dirty[meta.name] = true end +--- Rebuild all plugins based on dirty fragments, +--- or dirty plugins. Will remove plugins that no longer have fragments. function M:rebuild() for fid in pairs(self.fragments.dirty) do local meta = self.frag_to_meta[fid] @@ -101,6 +109,9 @@ function M:rebuild() end end +--- Rebuild a single plugin. +--- This will resolve the plugin based on its fragments using metatables. +--- This also resolves dependencies, dep, optional, dir, dev, and url. ---@param name string function M:_rebuild(name) local plugin = self.plugins[name] @@ -161,18 +172,23 @@ function M:_rebuild(name) plugin.dir = plugin.dir or Config.options.root .. "/" .. plugin.name end + -- dependencies if #plugin.dependencies == 0 and not super.dependencies then plugin.dependencies = nil end + + -- optional if not plugin.optional and not super.optional then plugin.optional = nil end + setmetatable(plugin, { __index = super }) self.dirty[plugin.name] = nil return plugin end +--- Disable a plugin. ---@param plugin LazyPlugin function M:disable(plugin) plugin._.kind = "disabled" @@ -180,6 +196,7 @@ function M:disable(plugin) self.spec.disabled[plugin.name] = plugin end +--- Check if a plugin should be disabled, but ignore uninstalling it. function M:fix_cond() for _, plugin in pairs(self.plugins) do local cond = plugin.cond @@ -203,6 +220,7 @@ function M:fix_cond() end end +--- Removes plugins for which all its fragments are optional. function M:fix_optional() if self.spec.optional then return 0 @@ -218,6 +236,7 @@ function M:fix_optional() return changes end +--- Removes plugins that are disabled. function M:fix_disabled() local changes = 0 for _, plugin in pairs(self.plugins) do @@ -230,7 +249,8 @@ function M:fix_disabled() return changes end -function M:fix() +--- Resolve all plugins, based on cond, enabled and optional. +function M:resolve() Util.track("resolve plugins") self:rebuild() diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 6aec6f1..355d3d5 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -50,7 +50,7 @@ end function Spec:parse(spec) self:normalize(spec) - self.meta:fix() + self.meta:resolve() end -- PERF: optimized code to get package name without using lua patterns From 05e31ad0593063823f99d4d8145bca7893b37bed Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 23 Jun 2024 10:28:51 +0200 Subject: [PATCH 525/815] docs: added comment on package source order --- lua/lazy/core/config.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index db79250..46fbfd5 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -35,6 +35,7 @@ M.defaults = { enabled = true, cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. sources = { "lazy", "rockspec", From ee2ca39f672a2d6f4cbb683b525e6b3d91f3fc0c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 23 Jun 2024 17:48:10 +0200 Subject: [PATCH 526/815] feat(meta): check for dir changes for plugins already added to the rtp --- lua/lazy/core/meta.lua | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 35006d7..0deeb89 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -66,6 +66,17 @@ function M:add(plugin) table.insert(meta._.frags, fragment.id) + if meta._ and meta._.rtp_loaded then + local old_dir = meta.dir + self:_rebuild(meta.name) + local new_dir = meta.dir + if old_dir ~= new_dir then + local msg = "Plugin `" .. meta.name .. "` changed `dir`:\n- from: `" .. old_dir .. "`\n- to: `" .. new_dir .. "`" + msg = msg .. "\n\nThis plugin was already partially loaded, so things may break.\nPlease fix your config." + self.spec:error(msg) + end + end + if plugin.name then -- handle renames if meta.name ~= plugin.name then From 4326d4b487d4facc19b375ca30cd633cf56d88ed Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 23 Jun 2024 17:49:19 +0200 Subject: [PATCH 527/815] fix(pkg): correctly pre-load package specs and remove them when needed during resolve --- lua/lazy/core/meta.lua | 42 +++++++++++++++++++++++++++++++++++++++ lua/lazy/core/plugin.lua | 33 ++++++------------------------ lua/lazy/pkg/init.lua | 21 ++++++++++++++++++++ lua/lazy/pkg/rockspec.lua | 25 +++++++++++++---------- lua/lazy/types.lua | 1 + selene.toml | 3 +++ 6 files changed, 87 insertions(+), 38 deletions(-) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 0deeb89..533ec27 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -1,4 +1,5 @@ local Config = require("lazy.core.config") +local Pkg = require("lazy.pkg") local Util = require("lazy.core.util") --- This class is used to manage the plugins. @@ -10,6 +11,7 @@ local Util = require("lazy.core.util") ---@field dirty table ---@field spec LazySpecLoader ---@field fragments LazyFragments +---@field pkgs table local M = {} ---@param spec LazySpecLoader @@ -22,9 +24,30 @@ function M.new(spec) self.frag_to_meta = {} self.str_to_meta = {} self.dirty = {} + self.pkgs = {} return self end +-- import package specs +function M:load_pkgs() + if not Config.options.pkg.enabled then + return + end + local specs = Pkg.spec() + for dir, spec in pairs(specs) do + local meta, fragment = self:add(spec) + if meta and fragment then + -- tag all package fragments as optional + for _, fid in ipairs(meta._.frags) do + local frag = self.fragments:get(fid) + frag.spec.optional = true + end + -- keep track of the top-level package fragment + self.pkgs[dir] = fragment.id + end + end +end + --- Remove a plugin and all its fragments. ---@param name string function M:del(name) @@ -88,6 +111,7 @@ function M:add(plugin) self.plugins[meta.name] = meta self.frag_to_meta[fragment.id] = meta self.dirty[meta.name] = true + return meta, fragment end --- Rebuild all plugins based on dirty fragments, @@ -101,6 +125,7 @@ function M:rebuild() self.dirty[meta.name] = true else -- fragment was deleted, so remove it from plugin + self.frag_to_meta[fid] = nil ---@param f number meta._.frags = vim.tbl_filter(function(f) return f ~= fid @@ -260,11 +285,28 @@ function M:fix_disabled() return changes end +--- Removes package fragments for plugins that no longer use the same directory. +function M:fix_pkgs() + for dir, fid in pairs(self.pkgs) do + local plugin = self.frag_to_meta[fid] + plugin = plugin and self.plugins[plugin.name] + if plugin then + -- check if plugin is still in the same directory + if plugin.dir ~= dir then + self.fragments:del(fid) + end + end + end + self:rebuild() +end + --- Resolve all plugins, based on cond, enabled and optional. function M:resolve() Util.track("resolve plugins") self:rebuild() + self:fix_pkgs() + self:fix_cond() -- selene: allow(empty_loop) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 355d3d5..713e54c 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -1,6 +1,5 @@ local Config = require("lazy.core.config") local Meta = require("lazy.core.meta") -local Pkg = require("lazy.pkg") local Util = require("lazy.core.util") ---@class LazyCorePlugin @@ -16,7 +15,6 @@ M.loading = false ---@field notifs {msg:string, level:number, file?:string}[] ---@field importing? string ---@field optional? boolean ----@field pkgs table local Spec = {} M.Spec = Spec M.LOCAL_SPEC = ".lazy.lua" @@ -30,8 +28,8 @@ function Spec.new(spec, opts) self.modules = {} self.notifs = {} self.ignore_installed = {} - self.pkgs = {} self.optional = opts and opts.optional + self.meta:load_pkgs() if spec then self:parse(spec) end @@ -62,25 +60,6 @@ function Spec.get_name(pkg) return slash and name:sub(#name - slash + 2) or pkg:gsub("%W+", "_") end ----@param plugin LazyPluginSpec -function Spec:add(plugin) - self.meta:add(plugin) - - ---@diagnostic disable-next-line: cast-type-mismatch - ---@cast plugin LazyPlugin - - -- import the plugin's spec - if Config.options.pkg.enabled and plugin.dir and not self.pkgs[plugin.dir] then - self.pkgs[plugin.dir] = true - local pkg = Pkg.get_spec(plugin) - if pkg then - self:normalize(pkg) - end - end - - return plugin -end - function Spec:error(msg) self:log(msg, vim.log.levels.ERROR) end @@ -110,7 +89,7 @@ end ---@param spec LazySpec|LazySpecImport function Spec:normalize(spec) if type(spec) == "string" then - self:add({ spec }) + self.meta:add({ spec }) elseif #spec > 1 or Util.is_list(spec) then ---@cast spec LazySpec[] for _, s in ipairs(spec) do @@ -118,11 +97,11 @@ function Spec:normalize(spec) end elseif spec[1] or spec.dir or spec.url then ---@cast spec LazyPluginSpec - local plugin = self:add(spec) + self.meta:add(spec) ---@diagnostic disable-next-line: cast-type-mismatch - ---@cast plugin LazySpecImport - if plugin and plugin.import then - self:import(plugin) + ---@cast spec LazySpecImport + if spec and spec.import then + self:import(spec) end elseif spec.import then ---@cast spec LazySpecImport diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index 9858ad7..bee9b42 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -7,6 +7,7 @@ local M = {} ---@class LazyPkg ---@field source string +---@field name string ---@field file string ---@field spec? LazySpec ---@field chunk? string|fun():LazySpec @@ -30,6 +31,7 @@ function M.update() for _, source in ipairs(sources) do local spec = source.get(plugin) if spec then + spec.name = plugin.name if type(spec.chunk) == "function" then spec.chunk = string.dump(spec.chunk) end @@ -81,6 +83,25 @@ function M.get(plugin) return ret end +function M.spec() + if not M.cache then + _load() + end + ---@type table + local ret = {} + + for dir in pairs(M.cache) do + local pkg = M.get({ dir = dir }) + local spec = pkg and pkg.spec + if pkg and spec then + spec = type(spec) == "table" and vim.deepcopy(spec) or spec + ret[dir] = { pkg.name, specs = spec } + end + end + + return ret +end + ---@param plugin LazyPlugin ---@return LazySpec? function M.get_spec(plugin) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 7a0c752..5732fbf 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -29,24 +29,27 @@ function M.get(plugin) end ---@type RockSpec? + ---@diagnostic disable-next-line: missing-fields local rockspec = {} - local ret, err = loadfile(rockspec_file, "t", rockspec) - if not ret then + local load, err = loadfile(rockspec_file, "t", rockspec) + if not load then error(err) end - ret() - return rockspec - and rockspec.package + load() + + ---@param dep string + local rocks = vim.tbl_filter(function(dep) + local name = dep:gsub("%s.*", "") + return not vim.tbl_contains(M.skip, name) + end, rockspec and rockspec.dependencies or {}) + + return #rocks > 0 and { source = "rockspec", file = rockspec_file, spec = { - dir = plugin.dir, - url = plugin.url, - rocks = vim.tbl_filter(function(dep) - local name = dep:gsub("%s.*", "") - return not vim.tbl_contains(M.skip, name) - end, rockspec.dependencies), + plugin.name, + rocks = rocks, }, } or nil diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index dabfa58..cbff124 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -86,6 +86,7 @@ ---@class LazyFragment ---@field id number +---@field pkg? boolean ---@field pid? number ---@field deps? number[] ---@field frags? number[] diff --git a/selene.toml b/selene.toml index 7312a91..5867a2a 100644 --- a/selene.toml +++ b/selene.toml @@ -1 +1,4 @@ std="vim" + +[lints] +mixed_table="allow" From 183f59e2e85dea0c38ed7d16c7c7e543c0b739c7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 23 Jun 2024 21:07:44 +0200 Subject: [PATCH 528/815] feat!: new docs for v11.0 --- .github/workflows/ci.yml | 21 - README.md | 845 ++--------------------------- doc/.keep | 0 doc/lazy.nvim.txt | 1101 ++++++++++++++++++++++---------------- lua/lazy/core/config.lua | 7 +- 5 files changed, 674 insertions(+), 1300 deletions(-) create mode 100644 doc/.keep diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c7d3156..05b9111 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,31 +26,10 @@ jobs: nvim --version [ ! -d tests ] && exit 0 nvim --headless -u tests/init.lua -c "PlenaryBustedDirectory tests/ {minimal_init = 'tests/init.lua', sequential = true}" - docs: - runs-on: ubuntu-latest - needs: tests - if: ${{ github.ref == 'refs/heads/main' }} - steps: - - uses: actions/checkout@v4 - - name: panvimdoc - uses: kdheepak/panvimdoc@main - with: - vimdoc: lazy.nvim - version: "Neovim >= 0.8.0" - demojify: true - treesitter: true - - name: Push changes - uses: stefanzweifel/git-auto-commit-action@v5 - with: - commit_message: "chore(build): auto-generate vimdoc" - commit_user_name: "github-actions[bot]" - commit_user_email: "github-actions[bot]@users.noreply.github.com" - commit_author: "github-actions[bot] " release: name: release if: ${{ github.ref == 'refs/heads/main' }} needs: - - docs - tests runs-on: ubuntu-latest steps: diff --git a/README.md b/README.md index 9bde4f9..a950b94 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,36 @@ -# 💤 lazy.nvim +

+ Install + · + Configure + · + Docs +

+ + + + **lazy.nvim** is a modern plugin manager for Neovim. @@ -30,813 +62,6 @@ - Git >= **2.19.0** (for partial clones support) - a [Nerd Font](https://www.nerdfonts.com/) **_(optional)_** -## 📦 Installation +## 🚀 Getting Started -You can add the following Lua code to your `init.lua` to bootstrap **lazy.nvim**: - - - -```lua -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not (vim.uv or vim.loop).fs_stat(lazypath) then - vim.fn.system({ - "git", - "clone", - "--filter=blob:none", - "https://github.com/folke/lazy.nvim.git", - "--branch=stable", -- latest stable release - lazypath, - }) -end -vim.opt.rtp:prepend(lazypath) -``` - - - -Next step is to add **lazy.nvim** below the code added in the prior step in `init.lua`: - -```lua -require("lazy").setup(plugins, opts) -``` - -- **plugins**: this should be a `table` or a `string` - - `table`: a list with your [Plugin Spec](#-plugin-spec) - - `string`: a Lua module name that contains your [Plugin Spec](#-plugin-spec). See [Structuring Your Plugins](#-structuring-your-plugins) -- **opts**: see [Configuration](#%EF%B8%8F-configuration) **_(optional)_** - -```lua --- Example using a list of specs with the default options -vim.g.mapleader = " " -- Make sure to set `mapleader` before lazy so your mappings are correct -vim.g.maplocalleader = "\\" -- Same for `maplocalleader` - -require("lazy").setup({ - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - "folke/neodev.nvim", -}) -``` - -ℹ️ It is recommended to run `:checkhealth lazy` after installation. - -## 🔌 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 | -| **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` | -| **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 included in the spec | -| **cond** | `boolean?` or `fun(LazyPlugin):boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | -| **dependencies** | `LazySpec[]` | A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else. | -| **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | -| **opts** | `table` or `fun(LazyPlugin, opts:table)` | `opts` should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the `Plugin.config()` function. Setting this value will imply `Plugin.config()` | -| **config** | `fun(LazyPlugin, opts:table)` or `true` | `config` is executed when the plugin loads. The default implementation will automatically run `require(MAIN).setup(opts)` if `opts` or `config = true` is set. Lazy uses several heuristics to determine the plugin's `MAIN` module automatically based on the plugin's **name**. See also `opts`. To use the default implementation without `opts` set `config` to `true`. | -| **main** | `string?` | You can specify the `main` module to use for `config()` and `opts()`, in case it can not be determined automatically. See `config()` | -| **build** | `fun(LazyPlugin)` or `string` or a list of build commands | `build` is executed when a plugin is installed or updated. Before running `build`, a plugin is first loaded. If it's a string it will be run as a shell command. When prefixed with `:` it is a Neovim command. You can also specify a list to executed multiple build commands. Some plugins provide their own `build.lua` which is automatically used by lazy. So no need to specify a build step for those plugins. | -| **branch** | `string?` | Branch of the repository | -| **tag** | `string?` | Tag of the repository | -| **commit** | `string?` | Commit of the repository | -| **version** | `string?` or `false` to override the default | 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 | -| **submodules** | `boolean?` | When false, git submodules will not be fetched. Defaults to `true` | -| **event** | `string?` or `string[]` or `fun(self:LazyPlugin, event:string[]):string[]` or `{event:string[]\|string, pattern?:string[]\|string}` | Lazy-load on event. Events can be specified as `BufEnter` or with a pattern like `BufEnter *.lua` | -| **cmd** | `string?` or `string[]` or `fun(self:LazyPlugin, cmd:string[]):string[]` | Lazy-load on command | -| **ft** | `string?` or `string[]` or `fun(self:LazyPlugin, ft:string[]):string[]` | Lazy-load on filetype | -| **keys** | `string?` or `string[]` or `LazyKeysSpec[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[]` | Lazy-load on key mapping | -| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | -| **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | -| **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins | - -### Lazy Loading - -**lazy.nvim** automagically lazy-loads Lua modules, so it is not needed to -specify `module=...` everywhere in your plugin specification. This means that if -you have a plugin `A` that is lazy-loaded and a plugin `B` that requires a -module of plugin `A`, then plugin `A` will be loaded on demand as expected. - -If you don't want this behavior for a certain plugin, you can specify that with `module=false`. -You can then manually load the plugin with `:Lazy load foobar.nvim`. - -You can configure **lazy.nvim** to lazy-load all plugins by default with `config.defaults.lazy = true`. - -Additionally, you can also lazy-load on **events**, **commands**, -**file types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - -#### 🌈 Colorschemes - -Colorscheme plugins can be configured with `lazy=true`. The plugin will automagically load -when doing `colorscheme foobar`. - -> **NOTE:** since **start** plugins can possibly change existing highlight groups, -> it's important to make sure that your main **colorscheme** is loaded first. -> To ensure this you can use the `priority=1000` field. **_(see the examples)_** - -#### ⌨️ Lazy Key Mappings - -The `keys` property can be a `string` or `string[]` for simple normal-mode mappings, or it -can be a `LazyKeysSpec` table with the following key-value pairs: - -- **[1]**: (`string`) lhs **_(required)_** -- **[2]**: (`string|fun()`) rhs **_(optional)_** -- **mode**: (`string|string[]`) mode **_(optional, defaults to `"n"`)_** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **_(optional)_** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` function. - -```lua --- Example for neo-tree.nvim -{ - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, -} -``` - -### Versioning - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports [Semver](https://semver.org/) ranges. - -
-Click to see some examples - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - -
- -You can set `config.defaults.version = "*"` to install the latest stable -version of plugins that support Semver. - -### Examples - - - -```lua -return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, -} -``` - - - -## ⚙️ Configuration - -**lazy.nvim** comes with the following defaults: - - - -```lua -{ - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - lazy = false, -- should plugins be lazy-loaded? - version = nil, - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - -- version = "*", -- enable this to try installing the latest stable versions of plugins - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - build = { - -- Plugins can provide a `build.lua` file that will be executed when the plugin is installed - -- or updated. When the plugin spec also has a `build` command, the plugin's `build.lua` not be - -- executed. In this case, a warning message will be shown. - warn_on_override = true, - }, - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, -} -``` - - - -
-If you don't want to use a Nerd Font, you can replace the icons with Unicode symbols. - -```lua -{ - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, -} -``` - -
- -## 🚀 Usage - -Plugins are managed with the `:Lazy` command. -Open the help with `` to see all the key mappings. - -You can press `` on a plugin to show its details. Most properties -can be hovered with `` to open links, help files, readmes, -git commits and git issues. - -Lazy can automatically check for updates in the background. This feature -can be enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API function: - - - -| Command | Lua | Description | -| ------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -| `:Lazy build {plugins}` | `require("lazy").build(opts)` | Rebuild a plugin | -| `:Lazy check [plugins]` | `require("lazy").check(opts?)` | Check for updates and show the log (git fetch) | -| `:Lazy clean [plugins]` | `require("lazy").clean(opts?)` | Clean plugins that are no longer needed | -| `:Lazy clear` | `require("lazy").clear()` | Clear finished tasks | -| `:Lazy debug` | `require("lazy").debug()` | Show debug information | -| `:Lazy health` | `require("lazy").health()` | Run `:checkhealth lazy` | -| `:Lazy help` | `require("lazy").help()` | Toggle this help page | -| `:Lazy home` | `require("lazy").home()` | Go back to plugin list | -| `:Lazy install [plugins]` | `require("lazy").install(opts?)` | Install missing plugins | -| `:Lazy load {plugins}` | `require("lazy").load(opts)` | Load a plugin that has not been loaded yet. Similar to `:packadd`. Like `:Lazy load foo.nvim`. Use `:Lazy! load` to skip `cond` checks. | -| `:Lazy log [plugins]` | `require("lazy").log(opts?)` | Show recent updates | -| `:Lazy profile` | `require("lazy").profile()` | Show detailed profiling | -| `:Lazy reload {plugins}` | `require("lazy").reload(opts)` | Reload a plugin (experimental!!) | -| `:Lazy restore [plugins]` | `require("lazy").restore(opts?)` | Updates all plugins to the state in the lockfile. For a single plugin: restore it to the state in the lockfile or to a given commit under the cursor | -| `:Lazy sync [plugins]` | `require("lazy").sync(opts?)` | Run install, clean and update | -| `:Lazy update [plugins]` | `require("lazy").update(opts?)` | Update plugins. This will also update the lockfile | - - - -Any command can have a **bang** to make the command wait till it finished. For example, -if you want to sync lazy from the cmdline, you can use: - -```shell -nvim --headless "+Lazy! sync" +qa -``` - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - - - -```lua -{ - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, -} -``` - - - -**lazy.nvim** provides a statusline component that you can use to show the number of pending updates. -Make sure to enable `config.checker.enabled = true` to make this work. - -
-Example of configuring lualine.nvim - -```lua -require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, -}) - -``` - -
- -### 📆 User Events - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - -## 🔒 Lockfile `lazy-lock.json` - -After every **update**, the local lockfile is updated with the installed revisions. -It is recommended to have this file under version control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your plugins to -the version from the lockfile. - -## ⚡ Performance - -Great care has been taken to make the startup code (`lazy.core`) as efficient as possible. -During startup, all Lua files used before `VimEnter` or `BufReadPre` are byte-compiled and cached, -similar to what [impatient.nvim](https://github.com/lewis6991/impatient.nvim) does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you improve performance. -The profiling view shows you why and how long it took to load your plugins. - -![image](https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png) - -## 🐛 Debug - -See an overview of active lazy-loading handlers and what's in the module cache. - -![image](https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png) - -## ▶️ Startup Sequence - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete -startup sequence for more flexibility and better performance. - -In practice this means that step 10 of [Neovim Initialization](https://neovim.io/doc/user/starting.html#initialization) is done by Lazy: - -1. All the plugins' `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - -## 📂 Structuring Your Plugins - -Some users may want to split their plugin specs in multiple files. -Instead of passing a spec table to `setup()`, you can use a Lua module. -The specs from the **module** and any top-level **sub-modules** will be merged together in the final spec, -so it is not needed to add `require` calls in your main plugin file to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they're updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - -```lua -require("lazy").setup("plugins") -``` - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **_(this file is optional)_** - -```lua -return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, -} -``` - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check [LazyVim](https://github.com/LazyVim/LazyVim) and more specifically: - -- [lazyvim.plugins](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/plugins) contains all the plugin specs that will be loaded - -### ↩️ Importing Specs, `config` & `opts` - -As part of a spec, you can add `import` statements to import additional plugin modules. -Both of the `setup()` calls are equivalent: - -```lua -require("lazy").setup("plugins") - --- Same as: -require("lazy").setup({{import = "plugins"}}) -``` - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - -```lua -require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } -}) -``` - -When you import specs, you can override them by simply adding a spec for the same plugin to your local -specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with the parent spec. -Any other property will override the property from the parent spec. - -## 📦 Migration Guide - -### [packer.nvim](https://github.com/wbthomason/packer.nvim) - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **_not needed_** for most use-cases. Use `dependencies` otherwise. -- `wants` is **_not needed_** for most use-cases. Use `dependencies` otherwise. -- `config` don't support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is [different](#%EF%B8%8F-lazy-key-mappings) -- `rtp` can be accomplished with: - -```lua -config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") -end -``` - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn't needed for most of the Lua dependencies. They can be installed just like normal plugins -(even with `lazy=true`) and will be loaded when other plugins need them. -The `dependencies` key can be used to group those required plugins with the one that requires them. -The plugins which are added as `dependencies` will always be lazy-loaded and loaded when the plugin is loaded. - -### [paq-nvim](https://github.com/savq/paq-nvim) - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - -## ❌ Uninstalling - -To uninstall **lazy.nvim**, you need to remove the following files and directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - -> Paths can differ if you changed `XDG` environment variables. - -## 🌈 Highlight Groups - -
-Click to see all highlight groups - - - -| Highlight Group | Default Group | Description | -| --------------------- | -------------------------- | --------------------------------------------------- | -| **LazyButton** | **_CursorLine_** | | -| **LazyButtonActive** | **_Visual_** | | -| **LazyComment** | **_Comment_** | | -| **LazyCommit** | **_@variable.builtin_** | commit ref | -| **LazyCommitIssue** | **_Number_** | | -| **LazyCommitScope** | **_Italic_** | conventional commit scope | -| **LazyCommitType** | **_Title_** | conventional commit type | -| **LazyDimmed** | **_Conceal_** | property | -| **LazyDir** | **_@markup.link_** | directory | -| **LazyH1** | **_IncSearch_** | home button | -| **LazyH2** | **_Bold_** | titles | -| **LazyLocal** | **_Constant_** | | -| **LazyNoCond** | **_DiagnosticWarn_** | unloaded icon for a plugin where `cond()` was false | -| **LazyNormal** | **_NormalFloat_** | | -| **LazyProgressDone** | **_Constant_** | progress bar done | -| **LazyProgressTodo** | **_LineNr_** | progress bar todo | -| **LazyProp** | **_Conceal_** | property | -| **LazyReasonCmd** | **_Operator_** | | -| **LazyReasonEvent** | **_Constant_** | | -| **LazyReasonFt** | **_Character_** | | -| **LazyReasonImport** | **_Identifier_** | | -| **LazyReasonKeys** | **_Statement_** | | -| **LazyReasonPlugin** | **_Special_** | | -| **LazyReasonRequire** | **_@variable.parameter_** | | -| **LazyReasonRuntime** | **_@macro_** | | -| **LazyReasonSource** | **_Character_** | | -| **LazyReasonStart** | **_@variable.member_** | | -| **LazySpecial** | **_@punctuation.special_** | | -| **LazyTaskError** | **_ErrorMsg_** | task errors | -| **LazyTaskOutput** | **_MsgArea_** | task output | -| **LazyUrl** | **_@markup.link_** | url | -| **LazyValue** | **_@string_** | value of a property | - - - -
- -## 📚 Plugin Authors - -If your plugin needs a build step, you can create a file `build.lua` or `build/init.lua` -in the root of your repo. This file will be loaded when the plugin is installed or updated. - -This makes it easier for users, as they no longer need to specify a `build` command. - -## 📦 Other Neovim Plugin Managers in Lua - -- [pckr.nvim](https://github.com/lewis6991/pckr.nvim) -- [packer.nvim](https://github.com/wbthomason/packer.nvim) -- [paq-nvim](https://github.com/savq/paq-nvim) -- [neopm](https://github.com/ii14/neopm) -- [dep](https://github.com/chiyadev/dep) -- [optpack.nvim](https://github.com/notomo/optpack.nvim) -- [pact.nvim](https://github.com/rktjmp/pact.nvim) +Check the [documentation website](https://lazy.folke.io/) for more information. \ No newline at end of file diff --git a/doc/.keep b/doc/.keep new file mode 100644 index 0000000..e69de29 diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 876ea0a..14d4a16 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,307 +1,324 @@ -*lazy.nvim.txt* For Neovim >= 0.8.0 Last change: 2024 June 23 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. lazy.nvim |lazy.nvim-lazy.nvim| - - Features |lazy.nvim-lazy.nvim-features| - - Requirements |lazy.nvim-lazy.nvim-requirements| - - Installation |lazy.nvim-lazy.nvim-installation| - - Plugin Spec |lazy.nvim-lazy.nvim-plugin-spec| - - Configuration |lazy.nvim-lazy.nvim-configuration| - - Usage |lazy.nvim-lazy.nvim-usage| - - Lockfile lazy-lock.json |lazy.nvim-lazy.nvim-lockfile-lazy-lock.json| - - Performance |lazy.nvim-lazy.nvim-performance| - - Debug |lazy.nvim-lazy.nvim-debug| - - Startup Sequence |lazy.nvim-lazy.nvim-startup-sequence| - - Structuring Your Plugins |lazy.nvim-lazy.nvim-structuring-your-plugins| - - Migration Guide |lazy.nvim-lazy.nvim-migration-guide| - - Uninstalling |lazy.nvim-lazy.nvim-uninstalling| - - Highlight Groups |lazy.nvim-lazy.nvim-highlight-groups| - - Plugin Authors |lazy.nvim-lazy.nvim-plugin-authors| - - Other Neovim Plugin Managers in Lua|lazy.nvim-lazy.nvim-other-neovim-plugin-managers-in-lua| -2. Links |lazy.nvim-links| +1. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +2. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +3. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +4. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +5. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +6. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +7. 📚 Plugin Developers |lazy.nvim-📚-plugin-developers| +8. Links |lazy.nvim-links| ============================================================================== -1. lazy.nvim *lazy.nvim-lazy.nvim* +1. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) - a Nerd Font **(optional)** -INSTALLATION *lazy.nvim-lazy.nvim-installation* +============================================================================== +2. 🛠️ Installation *lazy.nvim-🛠️-installation* -You can add the following Lua code to your `init.lua` to bootstrap -**lazy.nvim** +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* >lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not (vim.uv or vim.loop).fs_stat(lazypath) then - vim.fn.system({ - "git", - "clone", - "--filter=blob:none", - "https://github.com/folke/lazy.nvim.git", - "--branch=stable", -- latest stable release - lazypath, - }) + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) end vim.opt.rtp:prepend(lazypath) -< - -Nextstep is to add **lazy.nvim** below the code added in the prior step in -`init.lua` - ->lua - require("lazy").setup(plugins, opts) -< - -- **plugins**this should be a `table` or a `string` - - `table`a list with your |lazy.nvim-plugin-spec| - - `string`a Lua module name that contains your |lazy.nvim-plugin-spec|. See |lazy.nvim-structuring-your-plugins| -- **opts**see |lazy.nvim-configuration| **(optional)** - ->lua - -- Example using a list of specs with the default options - vim.g.mapleader = " " -- Make sure to set `mapleader` before lazy so your mappings are correct - vim.g.maplocalleader = "\\" -- Same for `maplocalleader` + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim require("lazy").setup({ - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - "folke/neodev.nvim", + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, }) < -It is recommended to run `:checkhealth lazy` after installation. +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins -PLUGIN SPEC *lazy.nvim-lazy.nvim-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 - - 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 - - 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 included in the spec - - cond boolean? or fun(LazyPlugin):boolean When false, or if the function returns false, then - this plugin will not be loaded. Useful to disable - some plugins in vscode, or firenvim for example. - - dependencies LazySpec[] A list of plugin names or plugin specs that should - be loaded when the plugin loads. Dependencies are - always lazy-loaded unless specified otherwise. When - specifying a name, make sure the plugin spec has - been defined somewhere else. - - init fun(LazyPlugin) init functions are always executed during startup - - opts table or fun(LazyPlugin, opts:table) opts should be a table (will be merged with parent - specs), return a table (replaces parent specs) or - should change a table. The table will be passed to - the Plugin.config() function. Setting this value - will imply Plugin.config() - - config fun(LazyPlugin, opts:table) or true config is executed when the plugin loads. The - default implementation will automatically run - require(MAIN).setup(opts) if opts or config = true - is set. Lazy uses several heuristics to determine - the plugin’s MAIN module automatically based on the - plugin’s name. See also opts. To use the default - implementation without opts set config to true. - - main string? You can specify the main module to use for config() - and opts(), in case it can not be determined - automatically. See config() - - build fun(LazyPlugin) or string or a list of build commands build is executed when a plugin is installed or - updated. Before running build, a plugin is first - loaded. If it’s a string it will be run as a shell - command. When prefixed with : it is a Neovim - command. You can also specify a list to executed - multiple build commands. Some plugins provide their - own build.lua which is automatically used by lazy. - So no need to specify a build step for those - plugins. - - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to override the default Version to use from the repository. Full Semver - ranges are supported - - pin boolean? When true, this plugin will not be included in - updates - - submodules boolean? When false, git submodules will not be fetched. - Defaults to true - - event string? or string[] or Lazy-load on event. Events can be specified as - fun(self:LazyPlugin, event:string[]):string[] or BufEnter or with a pattern like BufEnter *.lua - {event:string[]\|string, pattern?:string[]\|string} - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - - module false? Do not automatically load this Lua module when it’s - required somewhere - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is - 50. It’s recommended to set this to a high number - for colorschemes. - - optional boolean? When a spec is tagged optional, it will only be - included in the final spec, when the same plugin has - been specified at least once somewhere else without - optional. This is mainly useful for Neovim distros, - to allow setting options on plugins that may/may not - be part of the user’s plugins - ------------------------------------------------------------------------------------------------------------------------------------ - -LAZY LOADING ~ - -**lazy.nvim** automagically lazy-loads Lua modules, so it is not needed to -specify `module=...` everywhere in your plugin specification. This means that -if you have a plugin `A` that is lazy-loaded and a plugin `B` that requires a -module of plugin `A`, then plugin `A` will be loaded on demand as expected. - -If you don’t want this behavior for a certain plugin, you can specify that -with `module=false`. You can then manually load the plugin with `:Lazy load -foobar.nvim`. - -You can configure **lazy.nvim** to lazy-load all plugins by default with -`config.defaults.lazy = true`. - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true` - -- Theplugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -COLORSCHEMES - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - **NOTE:** since **start** plugins can possibly change existing highlight - groups, it’s important to make sure that your main **colorscheme** is loaded - first. To ensure this you can use the `priority=1000` field. **(see the - examples)** - -LAZY KEY MAPPINGS - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**(`string`) lhs **(required)** -- **[2]**(`string|fun()`) rhs **(optional)** -- **mode**(`string|string[]`) mode **(optional, defaults to "n")** -- **ft**(`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* >lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) < -VERSIONING ~ - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - -Click to see some examples ~ - -- `*`latest stable version (this excludes pre-release versions) -- `1.2.x`any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - -You can set `config.defaults.version = "*"` to install the latest stable -version of plugins that support Semver. +============================================================================== +3. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* -EXAMPLES ~ +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + ----------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- ------------------------------------------------------------ + init fun(LazyPlugin) init functions are always executed during startup + + opts table or opts should be a table (will be merged with parent specs), + fun(LazyPlugin, opts:table) return a table (replaces parent specs) or should change a + table. The table will be passed to the Plugin.config() + function. Setting this value will imply Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is set. + Lazy uses several heuristics to determine the plugin’s MAIN + module automatically based on the plugin’s name. See also + opts. To use the default implementation without opts set + config to true. + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. See + config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + a list of build commands Before running build, a plugin is first loaded. If it’s a + string it will be run as a shell command. When prefixed with + : it is a Neovim command. You can also specify a list to + executed multiple build commands. Some plugins provide their + own build.lua which is automatically used by lazy. So no + need to specify a build step for those plugins. + + rocks string[]? Add any luarocks dependencies. + ----------------------------------------------------------------------------------------------------- + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* >lua return { @@ -394,7 +411,120 @@ EXAMPLES ~ < -CONFIGURATION *lazy.nvim-lazy.nvim-configuration* +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +4. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-scm-1.rockspec` file, **lazy.nvim** will +automatically load its `rocks` dependencies. + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +5. ⚙️ Configuration *lazy.nvim-⚙️-configuration* **lazy.nvim** comes with the following defaults: @@ -402,8 +532,13 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* { root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. lazy = false, -- should plugins be lazy-loaded? - version = nil, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver -- default `cond` you can use to globally disable a lot of plugins -- when running inside vscode for example cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil @@ -426,6 +561,21 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* -- increase downloads a lot. filter = true, }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, dev = { ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects path = "~/projects", @@ -455,6 +605,7 @@ CONFIGURATION *lazy.nvim-lazy.nvim-configuration* cmd = " ", config = "", event = " ", + favorite = " ", ft = " ", init = " ", import = " ", @@ -601,7 +752,101 @@ If you don’t want to use a Nerd Font, you can replace the icons with Unicode s < -USAGE *lazy.nvim-lazy.nvim-usage* +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +6. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* Plugins are managed with the `:Lazy` command. Open the help with `` to see all the key mappings. @@ -616,14 +861,17 @@ enabled with `config.checker.enabled = true`. Any operation can be started from the UI, with a sub command or an API function: - -------------------------------------------------------------------------------------------------------------- + ---------------------------------------------------------------------------------- Command Lua Description - ------------------------- -------------------------------- --------------------------------------------------- + ------------------------- -------------------------------- ----------------------- :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and show the log (git fetch) + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are no longer needed + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed :Lazy clear require("lazy").clear() Clear finished tasks @@ -637,24 +885,36 @@ function: :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has not been loaded yet. Similar - to :packadd. Like :Lazy load foo.nvim. Use - :Lazy! load to skip cond checks. + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. :Lazy log [plugins] require("lazy").log(opts?) Show recent updates :Lazy profile require("lazy").profile() Show detailed profiling - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin (experimental!!) + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to the state in the lockfile. - For a single plugin: restore it to the state in the - lockfile or to a given commit under the cursor + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and update + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This will also update the lockfile - -------------------------------------------------------------------------------------------------------------- + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- Any command can have a **bang** to make the command wait till it finished. For example, if you want to sync lazy from the cmdline, you can use: @@ -664,10 +924,10 @@ example, if you want to sync lazy from the cmdline, you can use: `opts` is a table with the following key-values: -- **wait**when true, then the call will wait till the operation completed -- **show**when false, the UI will not be shown -- **plugins**a list of plugin names to run the operation on -- **concurrency**limit the `number` of concurrently running tasks +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks Stats API (`require("lazy").stats()`): @@ -707,34 +967,47 @@ Example of configuring lualine.nvim ~ < -USER EVENTS ~ +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* The following user events will be triggered: -- **LazyDone**when lazy has finished starting up and loaded your config -- **LazySync**after running sync -- **LazyInstall**after an install -- **LazyUpdate**after an update -- **LazyClean**after a clean -- **LazyCheck**after checking for updates -- **LazyLog**after running log -- **LazyLoad**after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**before running sync -- **LazyInstallPre**before an install -- **LazyUpdatePre**before an update -- **LazyCleanPre**before a clean -- **LazyCheckPre**before checking for updates -- **LazyLogPre**before running log -- **LazyReload**triggered by change detection after reloading plugin specs -- **VeryLazy**triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. Useful to update the startuptime on your dashboard. -LOCKFILE LAZY-LOCK.JSON *lazy.nvim-lazy.nvim-lockfile-lazy-lock.json* +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* -After every **update**, the local lockfile is updated with the installed -revisions. It is recommended to have this file under version control. +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. If you use your Neovim config on multiple machines, using the lockfile, you can ensure that the same version of every plugin is installed. @@ -743,7 +1016,49 @@ If you are on another machine, you can do `:Lazy restore`, to update all your plugins to the version from the lockfile. -PERFORMANCE *lazy.nvim-lazy.nvim-performance* +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* Great care has been taken to make the startup code (`lazy.core`) as efficient as possible. During startup, all Lua files used before `VimEnter` or @@ -758,29 +1073,13 @@ improve performance. The profiling view shows you why and how long it took to load your plugins. -DEBUG *lazy.nvim-lazy.nvim-debug* +🐛 DEBUG ~ See an overview of active lazy-loading handlers and what’s in the module cache. -STARTUP SEQUENCE *lazy.nvim-lazy.nvim-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -STRUCTURING YOUR PLUGINS *lazy.nvim-lazy.nvim-structuring-your-plugins* +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* Some users may want to split their plugin specs in multiple files. Instead of passing a spec table to `setup()`, you can use a Lua module. The specs from the @@ -820,7 +1119,7 @@ For a real-life example, you can check LazyVim - lazyvim.plugins contains all the plugin specs that will be loaded -IMPORTING SPECS, CONFIG & OPTS ~ +↩️ IMPORTING SPECS, CONFIG & OPTS As part of a spec, you can add `import` statements to import additional plugin modules. Both of the `setup()` calls are equivalent: @@ -852,155 +1151,21 @@ the parent spec. Any other property will override the property from the parent spec. -MIGRATION GUIDE *lazy.nvim-lazy.nvim-migration-guide* +============================================================================== +7. 📚 Plugin Developers *lazy.nvim-📚-plugin-developers* +To make it easier for users to install your plugin, you can include a package +spec in your repo. -PACKER.NVIM ~ - -- `setup` `init` -- `requires` `dependencies` -- `as` `name` -- `opt` `lazy` -- `run` `build` -- `lock` `pin` -- `disable=true` `enabled = false` -- `tag='*'` `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` `name` -- `opt` `lazy` -- `run` `build` - - -UNINSTALLING *lazy.nvim-lazy.nvim-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**`~/.local/share/nvim/lazy` -- **state**`~/.local/state/nvim/lazy` -- **lockfile**`~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -HIGHLIGHT GROUPS *lazy.nvim-lazy.nvim-highlight-groups* - -Click to see all highlight groups ~ - - --------------------------------------------------------------------------------- - Highlight Group Default Group Description - ------------------- ------------------------ ------------------------------------ - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit _@variable.builtin_ commitref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit scope - - LazyCommitType Title conventional commit type - - LazyDimmed Conceal property - - LazyDir _@markup.link_ directory - - LazyH1 IncSearch homebutton - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a plugin where - cond() was false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire _@variable.parameter_ - - LazyReasonRuntime _@macro_ - - LazyReasonSource Character - - LazyReasonStart _@variable.member_ - - LazySpecial _@punctuation.special_ - - LazyTaskError ErrorMsg taskerrors - - LazyTaskOutput MsgArea task output - - LazyUrl _@markup.link_ url - - LazyValue _@string_ valueof a property - --------------------------------------------------------------------------------- - -PLUGIN AUTHORS *lazy.nvim-lazy.nvim-plugin-authors* - -If your plugin needs a build step, you can create a file `build.lua` or -`build/init.lua` in the root of your repo. This file will be loaded when the -plugin is installed or updated. +If your plugin needs a build step, you can specify this in your **package +file**, or create a file `build.lua` or `build/init.lua` in the root of your +repo. This file will be loaded when the plugin is installed or updated. This makes it easier for users, as they no longer need to specify a `build` command. - -OTHER NEOVIM PLUGIN MANAGERS IN LUA*lazy.nvim-lazy.nvim-other-neovim-plugin-managers-in-lua* - -- pckr.nvim -- packer.nvim -- paq-nvim -- neopm -- dep -- optpack.nvim -- pact.nvim - ============================================================================== -2. Links *lazy.nvim-links* +8. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png 2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 46fbfd5..1b5d734 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -7,8 +7,13 @@ local M = {} M.defaults = { root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. lazy = false, -- should plugins be lazy-loaded? - version = nil, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver -- default `cond` you can use to globally disable a lot of plugins -- when running inside vscode for example cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil From fd8229d6e312e83d6bafda256adf0e650b13ca01 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 23 Jun 2024 22:00:48 +0200 Subject: [PATCH 529/815] fix(pkg): versioning and reload specs when pkg-cache is dirty --- lua/lazy/core/plugin.lua | 7 +++ lua/lazy/pkg/init.lua | 92 +++++++++++++++++++------------------- lua/lazy/pkg/lazy.lua | 3 +- lua/lazy/pkg/rockspec.lua | 2 +- lua/lazy/view/commands.lua | 3 +- 5 files changed, 59 insertions(+), 48 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 713e54c..878ed3f 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -1,5 +1,6 @@ local Config = require("lazy.core.config") local Meta = require("lazy.core.meta") +local Pkg = require("lazy.pkg") local Util = require("lazy.core.util") ---@class LazyCorePlugin @@ -332,6 +333,12 @@ function M.load() Util.track("state") M.update_state() Util.track() + + if Config.options.pkg.enabled and Pkg.dirty then + Pkg.update() + return M.load() + end + M.loading = false vim.api.nvim_exec_autocmds("User", { pattern = "LazyPlugins", modeline = false }) end diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index bee9b42..781f66a 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -2,6 +2,8 @@ local Config = require("lazy.core.config") local Util = require("lazy.util") local M = {} +M.VERSION = 7 +M.dirty = false ---@alias LazyPkgSpec LazySpec | fun():LazySpec @@ -10,10 +12,13 @@ local M = {} ---@field name string ---@field file string ---@field spec? LazySpec ----@field chunk? string|fun():LazySpec + +---@class LazyPkgInput: LazyPkg +---@field spec? LazySpec|fun():LazySpec +---@field code? string ---@class LazyPkgSource ----@field get fun(plugin:LazyPlugin):LazyPkg +---@field get fun(plugin:LazyPlugin):LazyPkgInput? ---@type table? M.cache = nil @@ -25,76 +30,78 @@ function M.update() sources[#sources + 1] = require("lazy.pkg." .. s) end - ---@type table - local ret = {} + M.cache = {} for _, plugin in pairs(Config.plugins) do - for _, source in ipairs(sources) do - local spec = source.get(plugin) - if spec then - spec.name = plugin.name - if type(spec.chunk) == "function" then - spec.chunk = string.dump(spec.chunk) + if plugin._.installed then + for _, source in ipairs(sources) do + local spec = source.get(plugin) + if spec then + spec.name = plugin.name + if type(spec.code) == "string" then + spec.spec = { _raw = spec.code } + spec.code = nil + end + M.cache[plugin.dir] = spec + break end - ret[plugin.dir] = spec - break end end end - local code = "return " .. Util.dump(ret) + local code = "return " .. Util.dump({ version = M.VERSION, specs = M.cache }) Util.write_file(Config.options.pkg.cache, code) + M.dirty = false M.cache = nil end local function _load() Util.track("pkg") - M.cache = {} + M.cache = nil if vim.uv.fs_stat(Config.options.pkg.cache) then Util.try(function() local chunk, err = loadfile(Config.options.pkg.cache) if not chunk then error(err) end - M.cache = chunk() + local ret = chunk() + if ret and ret.version == M.VERSION then + M.cache = ret.specs + end end, "Error loading pkg:") end + if rawget(M, "cache") then + M.dirty = false + else + M.cache = {} + M.dirty = true + end Util.track() end ----@param plugin LazyPlugin +---@param dir string ---@return LazyPkg? -function M.get(plugin) - if not M.cache then - _load() - end - - local ret = M.cache[plugin.dir] +function M.get(dir) + local ret = M.cache[dir] if not ret then return end - if ret.chunk and not ret.spec then - if type(ret.chunk) == "string" then - ret.chunk = load(ret.chunk, "@" .. plugin.dir) - end - ret.spec = ret.chunk() - ret.chunk = nil + if type(ret.spec) == "function" then + ret.spec = ret.spec() end return ret end function M.spec() - if not M.cache then - _load() - end ---@type table local ret = {} for dir in pairs(M.cache) do - local pkg = M.get({ dir = dir }) + local pkg = M.get(dir) local spec = pkg and pkg.spec if pkg and spec then spec = type(spec) == "table" and vim.deepcopy(spec) or spec + ---@cast spec LazySpec ret[dir] = { pkg.name, specs = spec } end end @@ -102,16 +109,11 @@ function M.spec() return ret end ----@param plugin LazyPlugin ----@return LazySpec? -function M.get_spec(plugin) - local pkg = M.get(plugin) - local spec = pkg and pkg.spec - if not spec then - return - end - spec = type(spec) == "table" and vim.deepcopy(spec) or spec - return { plugin.name, specs = spec } -end - -return M +return setmetatable(M, { + __index = function(_, key) + if key == "cache" then + _load() + return M.cache + end + end, +}) diff --git a/lua/lazy/pkg/lazy.lua b/lua/lazy/pkg/lazy.lua index 07b0491..9ca0637 100644 --- a/lua/lazy/pkg/lazy.lua +++ b/lua/lazy/pkg/lazy.lua @@ -16,11 +16,12 @@ function M.get(plugin) end, "`" .. M.lazy_file .. "` for **" .. plugin.name .. "** has errors:") if not chunk then Util.error("Invalid `" .. M.lazy_file .. "` for **" .. plugin.name .. "**") + return end return { source = "lazy", file = M.lazy_file, - chunk = chunk, + code = "function()\n" .. Util.read_file(file) .. "\nend", } end end diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 5732fbf..c0e5ec3 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -46,7 +46,7 @@ function M.get(plugin) return #rocks > 0 and { source = "rockspec", - file = rockspec_file, + file = vim.fn.fnamemodify(rockspec_file, ":t"), spec = { plugin.name, rocks = rocks, diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index 6b828a5..9791924 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -34,6 +34,7 @@ M.commands = { health = function() vim.cmd.checkhealth("lazy") end, + ---@param opts ManagerOpts pkg = function(opts) local Pkg = require("lazy.pkg") Pkg.update() @@ -44,7 +45,7 @@ M.commands = { }, }) for _, plugin in pairs(opts and opts.plugins or {}) do - local spec = Pkg.get(plugin) + local spec = Pkg.get(plugin.dir) Util.info(vim.inspect(spec), { lang = "lua", title = plugin.name }) end end, From 3515cb518f61c02b41cd3a8d8135c9a5862a982f Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 23 Jun 2024 22:04:32 +0200 Subject: [PATCH 530/815] fix(pkg): make sure state dir exists --- lua/lazy/pkg/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index 781f66a..c43a53f 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -48,6 +48,7 @@ function M.update() end end local code = "return " .. Util.dump({ version = M.VERSION, specs = M.cache }) + vim.fn.mkdir(vim.fn.fnamemodify(Config.options.pkg.cache, ":h"), "p") Util.write_file(Config.options.pkg.cache, code) M.dirty = false M.cache = nil From 7b6ddbfc137ad5d8b178a3bbf5a1338630f30625 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 23 Jun 2024 22:15:10 +0200 Subject: [PATCH 531/815] fix(pkg): automatically update pkgs when editing a pkg file --- lua/lazy/core/config.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 1b5d734..a7ac3c8 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -318,9 +318,13 @@ function M.setup(opts) -- useful for plugin developers when making changes to a packspec file vim.api.nvim_create_autocmd("BufWritePost", { - pattern = "lazy.lua", + pattern = { "lazy.lua", "pkg.json", "*.rockspec" }, callback = function() - require("lazy.view.commands").cmd("pkg") + require("lazy").pkg({ + plugins = { + require("lazy.core.plugin").find(vim.uv.cwd() .. "/lua/"), + }, + }) end, }) end, From 502600d3e693bf84eb7dac753e0f6999d62fa1b0 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 06:44:33 +0200 Subject: [PATCH 532/815] docs: fix default lazy-loading comment --- lua/lazy/core/config.lua | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index a7ac3c8..83634be 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -7,8 +7,8 @@ local M = {} M.defaults = { root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed defaults = { - -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. - -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + -- If you know what you're doing, you can set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. lazy = false, -- should plugins be lazy-loaded? -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, -- have outdated releases, which may break your Neovim install. @@ -17,7 +17,6 @@ M.defaults = { -- default `cond` you can use to globally disable a lot of plugins -- when running inside vscode for example cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - -- version = "*", -- enable this to try installing the latest stable versions of plugins }, -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec From 23c2851265ca11a4e92f5f506fd154bbe5431ddb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Jun 2024 05:10:36 +0000 Subject: [PATCH 533/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 14d4a16..e6fda3d 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -532,8 +532,8 @@ will be added to the plugin’s spec. { root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed defaults = { - -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. - -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + -- If you know what you're doing, you can set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. lazy = false, -- should plugins be lazy-loaded? -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, -- have outdated releases, which may break your Neovim install. @@ -542,7 +542,6 @@ will be added to the plugin’s spec. -- default `cond` you can use to globally disable a lot of plugins -- when running inside vscode for example cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - -- version = "*", -- enable this to try installing the latest stable versions of plugins }, -- leave nil when passing the spec as the first argument to setup() spec = nil, ---@type LazySpec From d498f81b8ca81179d82a2f20c3c4bc5935a60bee Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 07:12:32 +0200 Subject: [PATCH 534/815] style: wording --- lua/lazy/core/config.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 83634be..1fb28bb 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -7,7 +7,7 @@ local M = {} M.defaults = { root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed defaults = { - -- If you know what you're doing, you can set this to `true` to have all your plugins lazy-loaded by default. + -- Set this to `true` to have all your plugins lazy-loaded by default. -- Only do this if you know what you are doing, as it can lead to unexpected behavior. lazy = false, -- should plugins be lazy-loaded? -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, From d4c07d062dde09cf4e0f716bbf2815052783a3ba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Jun 2024 05:13:25 +0000 Subject: [PATCH 535/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index e6fda3d..8562034 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -532,7 +532,7 @@ will be added to the plugin’s spec. { root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed defaults = { - -- If you know what you're doing, you can set this to `true` to have all your plugins lazy-loaded by default. + -- Set this to `true` to have all your plugins lazy-loaded by default. -- Only do this if you know what you are doing, as it can lead to unexpected behavior. lazy = false, -- should plugins be lazy-loaded? -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, From b3ee5b96f242a86962371df6708bf598fed56e82 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Jun 2024 06:35:54 +0000 Subject: [PATCH 536/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 56 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 8562034..ed9bcad 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -3,13 +3,15 @@ ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 🚀 Getting Started |lazy.nvim-🚀-getting-started| +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -2. 🛠️ Installation |lazy.nvim-🛠️-installation| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -3. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| @@ -19,13 +21,13 @@ Table of Contents *lazy.nvim-table-of-contents* - Examples |lazy.nvim-🔌-plugin-spec-examples| - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -4. 📦 Packages |lazy.nvim-📦-packages| +5. 📦 Packages |lazy.nvim-📦-packages| - Lazy |lazy.nvim-📦-packages-lazy| - Rockspec |lazy.nvim-📦-packages-rockspec| - Packspec |lazy.nvim-📦-packages-packspec| -5. ⚙️ Configuration |lazy.nvim-⚙️-configuration| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -6. 🚀 Usage |lazy.nvim-🚀-usage| +7. 🚀 Usage |lazy.nvim-🚀-usage| - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| @@ -34,11 +36,33 @@ Table of Contents *lazy.nvim-table-of-contents* - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -7. 📚 Plugin Developers |lazy.nvim-📚-plugin-developers| -8. Links |lazy.nvim-links| +8. 📚 Plugin Developers |lazy.nvim-📚-plugin-developers| +9. Links |lazy.nvim-links| ============================================================================== -1. 🚀 Getting Started *lazy.nvim-🚀-getting-started* +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + + +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at lazy.nvim . The GitHub + `README.md` has been updated to point to the new website. The `vimdoc` contains + all the information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- `rocks`: specs can now specify a list of rocks (luarocks + ) that should be installed. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + + +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. @@ -72,7 +96,7 @@ Table of Contents *lazy.nvim-table-of-contents* ============================================================================== -2. 🛠️ Installation *lazy.nvim-🛠️-installation* +3. 🛠️ Installation *lazy.nvim-🛠️-installation* There are multiple ways to install **lazy.nvim**. The **Structured Setup** is the recommended way, but you can also use the **Single File Setup** if you @@ -161,7 +185,7 @@ SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* ============================================================================== -3. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* @@ -488,7 +512,7 @@ EXAMPLES ~ ============================================================================== -4. 📦 Packages *lazy.nvim-📦-packages* +5. 📦 Packages *lazy.nvim-📦-packages* **lazy.nvim** supports three ways for plugins to define their dependencies and configuration. @@ -524,7 +548,7 @@ will be added to the plugin’s spec. ============================================================================== -5. ⚙️ Configuration *lazy.nvim-⚙️-configuration* +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* **lazy.nvim** comes with the following defaults: @@ -826,7 +850,7 @@ If you don’t want to use a Nerd Font, you can replace the icons with Unicode s ----------------------------------------------------------------------- ============================================================================== -6. 🚀 Usage *lazy.nvim-🚀-usage* +7. 🚀 Usage *lazy.nvim-🚀-usage* ▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* @@ -1151,7 +1175,7 @@ spec. ============================================================================== -7. 📚 Plugin Developers *lazy.nvim-📚-plugin-developers* +8. 📚 Plugin Developers *lazy.nvim-📚-plugin-developers* To make it easier for users to install your plugin, you can include a package spec in your repo. @@ -1164,7 +1188,7 @@ This makes it easier for users, as they no longer need to specify a `build` command. ============================================================================== -8. Links *lazy.nvim-links* +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png 2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png From fcfd54835da5af64c6046060f4db62c4626d209c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 14:14:41 +0200 Subject: [PATCH 537/815] feat: spec.rocks is no longer needed & added support for installing any luarock --- lua/lazy/core/config.lua | 14 ------ lua/lazy/core/loader.lua | 16 +++++- lua/lazy/core/meta.lua | 32 +++++++----- lua/lazy/core/plugin.lua | 27 ++++++++-- lua/lazy/manage/init.lua | 6 +-- lua/lazy/manage/rocks.lua | 90 ---------------------------------- lua/lazy/manage/task/rocks.lua | 57 --------------------- lua/lazy/pkg/init.lua | 89 +++++++++++++++++---------------- lua/lazy/pkg/rockspec.lua | 18 +++++-- lua/lazy/types.lua | 6 +-- 10 files changed, 120 insertions(+), 235 deletions(-) delete mode 100644 lua/lazy/manage/rocks.lua delete mode 100644 lua/lazy/manage/task/rocks.lua diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 1fb28bb..624ce35 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -226,9 +226,6 @@ M.mapleader = nil ---@type string M.maplocalleader = nil ----@type {specs:string, tree:string, path:string, cpath:string} -M.rocks = {} - function M.headless() return #vim.api.nvim_list_uis() == 0 end @@ -279,17 +276,6 @@ function M.setup(opts) M.mapleader = vim.g.mapleader M.maplocalleader = vim.g.maplocalleader - M.rocks = { - specs = M.options.rocks.root .. "/specs", - tree = M.options.rocks.root .. "/tree", - path = M.options.rocks.root .. "/tree/share/lua/5.1", - cpath = M.options.rocks.root .. "/tree/lib/lua/5.1", - } - vim.fn.mkdir(M.rocks.specs, "p") - vim.fn.mkdir(M.rocks.tree, "p") - package.path = package.path .. ";" .. M.rocks.path .. "/?.lua;" .. M.rocks.path .. "/?/init.lua;" - package.cpath = package.cpath .. ";" .. M.rocks.cpath .. "/?." .. (jit.os:find("Windows") and "dll" or "so") .. ";" - if M.headless() then require("lazy.view.commands").setup() end diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index a0233ad..6f426d9 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -69,9 +69,8 @@ function M.install_missing() for _, plugin in pairs(Config.plugins) do local installed = plugin._.installed local has_errors = Plugin.has_errors(plugin) - local rocks_installed = plugin._.rocks_installed ~= false - if not has_errors and not (installed and rocks_installed) then + if not has_errors and not (installed and not plugin._.build) then for _, colorscheme in ipairs(Config.options.install.colorscheme) do if colorscheme == "default" then break @@ -344,6 +343,10 @@ function M._load(plugin, reason, opts) M.add_to_rtp(plugin) + if plugin._.pkg and plugin._.pkg.source == "rockspec" then + M.add_to_luapath(plugin) + end + if plugin.dependencies then Util.try(function() M.load(plugin.dependencies, {}) @@ -487,6 +490,15 @@ function M.add_to_rtp(plugin) vim.opt.rtp = rtp end +---@param plugin LazyPlugin +function M.add_to_luapath(plugin) + local root = Config.options.rocks.root .. "/" .. plugin.name + local path = root .. "/share/lua/5.1" + local cpath = root .. "/lib/lua/5.1" + package.path = package.path .. ";" .. path .. "/?.lua;" .. path .. "/?/init.lua;" + package.cpath = package.cpath .. ";" .. cpath .. "/?." .. (jit.os:find("Windows") and "dll" or "so") .. ";" +end + function M.source(path) Util.track({ runtime = path }) Util.try(function() diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 533ec27..43bd642 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -33,10 +33,11 @@ function M:load_pkgs() if not Config.options.pkg.enabled then return end - local specs = Pkg.spec() - for dir, spec in pairs(specs) do - local meta, fragment = self:add(spec) + local specs = Pkg.get() + for dir, pkg in pairs(specs) do + local meta, fragment = self:add(pkg.spec) if meta and fragment then + meta._.pkg = pkg -- tag all package fragments as optional for _, fid in ipairs(meta._.frags) do local frag = self.fragments:get(fid) @@ -165,18 +166,23 @@ function M:_rebuild(name) assert(#plugin._.frags > 0, "no fragments found for plugin " .. name) + ---@type table + local done = {} for _, fid in ipairs(plugin._.frags) do - local fragment = self.fragments:get(fid) - assert(fragment, "fragment " .. fid .. " not found, for plugin " .. name) - ---@diagnostic disable-next-line: no-unknown - super = setmetatable(fragment.spec, super and { __index = super } or nil) - plugin._.dep = plugin._.dep and fragment.dep - plugin.optional = plugin.optional and (rawget(fragment.spec, "optional") == true) - plugin.url = fragment.url or plugin.url + if not done[fid] then + done[fid] = true + local fragment = self.fragments:get(fid) + assert(fragment, "fragment " .. fid .. " not found, for plugin " .. name) + ---@diagnostic disable-next-line: no-unknown + super = setmetatable(fragment.spec, super and { __index = super } or nil) + plugin._.dep = plugin._.dep and fragment.dep + plugin.optional = plugin.optional and (rawget(fragment.spec, "optional") == true) + plugin.url = fragment.url or plugin.url - -- dependencies - for _, dep in ipairs(fragment.deps or {}) do - table.insert(plugin.dependencies, self.fragments:get(dep).name) + -- dependencies + for _, dep in ipairs(fragment.deps or {}) do + table.insert(plugin.dependencies, self.fragments:get(dep).name) + end end end diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 878ed3f..875b580 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -236,7 +236,7 @@ function M.update_state() installed[name] = nil end - require("lazy.manage.rocks").update_state() + M.update_rocks_state() Config.to_clean = {} for pack, dir_type in pairs(installed) do @@ -253,6 +253,23 @@ function M.update_state() end end +function M.update_rocks_state() + local root = Config.options.rocks.root + ---@type table + local installed = {} + Util.ls(root, function(_, name, type) + if type == "directory" then + installed[name] = name + end + end) + + for _, plugin in pairs(Config.plugins) do + if plugin._.pkg and plugin._.pkg.source == "rockspec" then + plugin._.build = not installed[plugin.name] + end + end +end + ---@param path string function M.local_spec(path) local file = vim.secure.read(path) @@ -321,11 +338,11 @@ function M.load() -- copy state. This wont do anything during startup for name, plugin in pairs(existing) do if Config.plugins[name] then - local dep = Config.plugins[name]._.dep - local frags = Config.plugins[name]._.frags + local new_state = Config.plugins[name]._ Config.plugins[name]._ = plugin._ - Config.plugins[name]._.dep = dep - Config.plugins[name]._.frags = frags + Config.plugins[name]._.dep = new_state.dep + Config.plugins[name]._.frags = new_state.frags + -- Config.plugins[name]._.tasks = new_state.tasks end end Util.track() diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 3e145c8..01c9a54 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -82,13 +82,12 @@ function M.install(opts) pipeline = { "git.clone", { "git.checkout", lockfile = opts.lockfile }, - "rocks.install", "plugin.docs", "wait", "plugin.build", }, plugins = function(plugin) - return plugin.url and not (plugin._.installed and plugin._.rocks_installed ~= false) + return plugin.url and not (plugin._.installed and not plugin._.build) end, }, opts):wait(function() require("lazy.manage.lock").update() @@ -107,7 +106,6 @@ function M.update(opts) "git.fetch", "git.status", { "git.checkout", lockfile = opts.lockfile }, - "rocks.install", "plugin.docs", "wait", "plugin.build", @@ -224,7 +222,7 @@ function M.clear(plugins) if plugin._.tasks then ---@param task LazyTask plugin._.tasks = vim.tbl_filter(function(task) - return task:is_running() + return task:is_running() or task.error end, plugin._.tasks) end end diff --git a/lua/lazy/manage/rocks.lua b/lua/lazy/manage/rocks.lua deleted file mode 100644 index 3e1bc6e..0000000 --- a/lua/lazy/manage/rocks.lua +++ /dev/null @@ -1,90 +0,0 @@ ---# selene:allow(incorrect_standard_library_use) - -local Config = require("lazy.core.config") -local Util = require("lazy.core.util") - ----@class LazyRock ----@field plugin string ----@field name string ----@field spec string ----@field installed boolean - -local M = {} ----@type LazyRock[] -M.rocks = {} - ----@param ... string ----@return string[] -function M.args(...) - local ret = { - "--tree", - Config.rocks.tree, - "--server", - Config.options.rocks.server, - "--dev", - "--lua-version", - "5.1", - } - vim.list_extend(ret, { ... }) - return ret -end - ----@param plugin LazyPlugin -function M.get_rockspec(plugin) - local rocks = vim.tbl_map(function(rock) - return rock.name - end, plugin._.rocks) - assert(rocks and #rocks > 0, plugin.name .. " has no rocks") - local rockspec_file = Config.rocks.specs .. "/lazy-" .. plugin.name .. "-scm-1.rockspec" - require("lazy.util").write_file( - rockspec_file, - ([[ -rockspec_format = "3.0" -package = "lazy-%s" -version = "scm-1" -source = { url = "%s" } -dependencies = %s -build = { type = "builtin" } -]]):format(plugin.name, plugin.url, vim.inspect(plugin.rocks)) - ) - return rockspec_file -end - -function M.update_state() - local root = Config.rocks.tree .. "/lib/luarocks/rocks-5.1" - ---@type table - local installed = {} - Util.ls(root, function(_, name, type) - if type == "directory" then - installed[name] = name - end - end) - - ---@type LazyRock[] - local rocks = {} - M.rocks = rocks - - for _, plugin in pairs(Config.plugins) do - if plugin.rocks then - plugin._.rocks = {} - plugin._.rocks_installed = true - for _, spec in ipairs(plugin.rocks) do - spec = vim.trim(spec) - local name = spec:gsub("%s.*", "") - local rock = { - plugin = plugin.name, - name = name, - spec = spec, - installed = installed[name] ~= nil, - } - if rock.name ~= "lua" then - plugin._.rocks_installed = plugin._.rocks_installed and rock.installed - table.insert(plugin._.rocks, rock) - table.insert(rocks, rock) - end - end - end - end -end - -return M diff --git a/lua/lazy/manage/task/rocks.lua b/lua/lazy/manage/task/rocks.lua deleted file mode 100644 index b2f61bf..0000000 --- a/lua/lazy/manage/task/rocks.lua +++ /dev/null @@ -1,57 +0,0 @@ -local Rocks = require("lazy.manage.rocks") - ----@type table -local M = {} - -local running = false -local has_rocks = nil ---@type boolean? - -M.install = { - skip = function(plugin) - return plugin._.rocks_installed ~= false - end, - run = function(self) - if has_rocks == nil then - has_rocks = vim.fn.executable("luarocks") == 1 - end - if not has_rocks then - self.error = "This plugin has luarocks dependencies,\nbut the `luarocks` executable is not found.\nPlease install https://luarocks.org/ to continue.\n" - .. "luarock deps: " - .. vim.inspect(self.plugin.rocks) - return - end - - local started = false - - local function install() - started = true - self.status = "luarocks (install)" - vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) - self:spawn("luarocks", { - args = Rocks.args("install", "--deps-mode", "one", "--deps-only", Rocks.get_rockspec(self.plugin)), - on_exit = function(ok) - running = false - if ok then - self.plugin._.rocks_installed = true - end - end, - }) - end - - local timer = vim.uv.new_timer() - timer:start(0, 100, function() - if not running then - running = true - timer:stop() - vim.schedule(install) - end - end) - self.status = "luarocks (pending)" - - table.insert(self._running, function() - return not started - end) - end, -} - -return M diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index c43a53f..48e755c 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -2,23 +2,28 @@ local Config = require("lazy.core.config") local Util = require("lazy.util") local M = {} -M.VERSION = 7 +M.VERSION = 8 M.dirty = false ----@alias LazyPkgSpec LazySpec | fun():LazySpec - ---@class LazyPkg ----@field source string ---@field name string +---@field dir string +---@field source "lazy" | "packspec" | "rockspec" +---@field file string +---@field spec LazyPluginSpec + +---@class LazyPkgSpec ---@field file string ---@field spec? LazySpec - ----@class LazyPkgInput: LazyPkg ----@field spec? LazySpec|fun():LazySpec ---@field code? string ---@class LazyPkgSource ----@field get fun(plugin:LazyPlugin):LazyPkgInput? +---@field name string +---@field get fun(plugin:LazyPlugin):LazyPkgSpec? + +---@class LazyPkgCache +---@field pkgs LazyPkg[] +---@field version number ---@type table? M.cache = nil @@ -27,27 +32,40 @@ function M.update() ---@type LazyPkgSource[] local sources = {} for _, s in ipairs(Config.options.pkg.sources) do - sources[#sources + 1] = require("lazy.pkg." .. s) + sources[#sources + 1] = { + name = s, + get = require("lazy.pkg." .. s).get, + } end - M.cache = {} + ---@type LazyPkgCache + local ret = { + version = M.VERSION, + pkgs = {}, + } for _, plugin in pairs(Config.plugins) do if plugin._.installed then for _, source in ipairs(sources) do local spec = source.get(plugin) if spec then - spec.name = plugin.name + ---@type LazyPkg + local pkg = { + name = plugin.name, + dir = plugin.dir, + source = source.name, + file = spec.file, + spec = spec.spec or {}, + } if type(spec.code) == "string" then - spec.spec = { _raw = spec.code } - spec.code = nil + pkg.spec = { _raw = spec.code } end - M.cache[plugin.dir] = spec + table.insert(ret.pkgs, pkg) break end end end end - local code = "return " .. Util.dump({ version = M.VERSION, specs = M.cache }) + local code = "return " .. Util.dump(ret) vim.fn.mkdir(vim.fn.fnamemodify(Config.options.pkg.cache, ":h"), "p") Util.write_file(Config.options.pkg.cache, code) M.dirty = false @@ -63,9 +81,18 @@ local function _load() if not chunk then error(err) end + ---@type LazyPkgCache? local ret = chunk() if ret and ret.version == M.VERSION then - M.cache = ret.specs + M.cache = {} + for _, pkg in ipairs(ret.pkgs) do + if type(pkg.spec) == "function" then + pkg.spec = pkg.spec() + end + -- wrap in the scope of the plugin + pkg.spec = { pkg.name, specs = pkg.spec } + M.cache[pkg.dir] = pkg + end end end, "Error loading pkg:") end @@ -80,34 +107,12 @@ end ---@param dir string ---@return LazyPkg? +---@overload fun():table function M.get(dir) - local ret = M.cache[dir] - if not ret then - return + if dir then + return M.cache[dir] end - - if type(ret.spec) == "function" then - ret.spec = ret.spec() - end - - return ret -end - -function M.spec() - ---@type table - local ret = {} - - for dir in pairs(M.cache) do - local pkg = M.get(dir) - local spec = pkg and pkg.spec - if pkg and spec then - spec = type(spec) == "table" and vim.deepcopy(spec) or spec - ---@cast spec LazySpec - ret[dir] = { pkg.name, specs = spec } - end - end - - return ret + return M.cache end return setmetatable(M, { diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index c0e5ec3..ba4a692 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -4,7 +4,7 @@ local Util = require("lazy.core.util") local M = {} -M.dev_suffix = "-scm-1.rockspec" +M.dev_suffix = "-1.rockspec" M.skip = { "lua" } ---@class RockSpec @@ -14,7 +14,7 @@ M.skip = { "lua" } ---@field dependencies string[] ---@param plugin LazyPlugin ----@return LazyPkg? +---@return LazyPkgSpec? function M.get(plugin) local rockspec_file ---@type string? Util.ls(plugin.dir, function(path, name, t) @@ -43,13 +43,21 @@ function M.get(plugin) return not vim.tbl_contains(M.skip, name) end, rockspec and rockspec.dependencies or {}) - return #rocks > 0 + local use = #rocks > 0 + use = true + + local lazy = nil + if not vim.uv.fs_stat(plugin.dir .. "/lua") then + lazy = false + end + + return use and { - source = "rockspec", file = vim.fn.fnamemodify(rockspec_file, ":t"), spec = { plugin.name, - rocks = rocks, + build = "rockspec", + lazy = lazy, }, } or nil diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index cbff124..4fd033c 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -8,6 +8,7 @@ ---@field dep? boolean True if this plugin is only in the spec as a dependency ---@field dir? string Explicit dir or dev set for this plugin ---@field dirty? boolean +---@field build? boolean ---@field frags? number[] ---@field handlers? LazyPluginHandlers ---@field installed? boolean @@ -15,13 +16,12 @@ ---@field kind? LazyPluginKind ---@field loaded? {[string]:string}|{time:number} ---@field outdated? boolean ----@field rocks? LazyRock[] ----@field rocks_installed? boolean ---@field rtp_loaded? boolean ---@field tasks? LazyTask[] ---@field updated? {from:string, to:string} ---@field updates? {from:GitInfo, to:GitInfo} ---@field working? boolean +---@field pkg? LazyPkg ---@alias PluginOpts table|fun(self:LazyPlugin, opts:table):table? @@ -29,7 +29,7 @@ ---@field init? fun(self:LazyPlugin) Will always be run ---@field deactivate? fun(self:LazyPlugin) Unload/Stop a plugin ---@field config? fun(self:LazyPlugin, opts:table)|true Will be executed when loading the plugin ----@field build? string|fun(self:LazyPlugin)|(string|fun(self:LazyPlugin))[] +---@field build? string|async fun(self:LazyPlugin)|(string|async fun(self:LazyPlugin))[] ---@field opts? PluginOpts ---@class LazyPluginHandlers From 368747bc9a314b4f0745547ebdcc3fbc4d100c0a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 14:16:00 +0200 Subject: [PATCH 538/815] feat(build): build files and functions are now async. use coroutine.yield to interrupt and report progress --- lua/lazy/core/config.lua | 6 --- lua/lazy/manage/task/init.lua | 26 +++++++++ lua/lazy/manage/task/plugin.lua | 96 ++++++++++++++++++++++----------- lua/lazy/util.lua | 12 +++++ 4 files changed, 102 insertions(+), 38 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 624ce35..0919cab 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -183,12 +183,6 @@ M.defaults = { skip_if_doc_exists = true, }, state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - build = { - -- Plugins can provide a `build.lua` file that will be executed when the plugin is installed - -- or updated. When the plugin spec also has a `build` command, the plugin's `build.lua` not be - -- executed. In this case, a warning message will be shown. - warn_on_override = true, - }, -- Enable profiling of lazy.nvim. This will add some overhead, -- so only enable this when you are debugging lazy.nvim profiling = { diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 2397cdf..d86ef5f 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -74,6 +74,32 @@ function Task:start() self:_check() end +---@param fn async fun() +function Task:async(fn) + local co = coroutine.create(fn) + local check = vim.uv.new_check() + check:start(vim.schedule_wrap(function() + local status = coroutine.status(co) + if status == "dead" then + check:stop() + self:_check() + elseif status == "suspended" then + local ok, res = coroutine.resume(co) + if not ok then + error(res) + elseif res then + self.status = res + self.output = self.output .. "\n" .. res + vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) + end + end + end)) + + table.insert(self._running, function() + return check:is_active() + end) +end + ---@private function Task:_check() for _, state in ipairs(self._running) do diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index e058c50..cd01a25 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -8,25 +8,67 @@ local M = {} ---@param plugin LazyPlugin local function get_build_file(plugin) for _, path in ipairs({ "build.lua", "build/init.lua" }) do - path = plugin.dir .. "/" .. path - if Util.file_exists(path) then + if Util.file_exists(plugin.dir .. "/" .. path) then return path end end end +local B = {} + +---@param task LazyTask +function B.rockspec(task) + local root = Config.options.rocks.root .. "/" .. task.plugin.name + vim.fn.mkdir(root, "p") + task:spawn("luarocks", { + args = { + "--tree", + root, + "--server", + Config.options.rocks.server, + "--dev", + "--lua-version", + "5.1", + "make", + "--force-fast", + }, + cwd = task.plugin.dir, + }) +end + +---@param task LazyTask +---@param build string +function B.cmd(task, build) + local cmd = vim.api.nvim_parse_cmd(build:sub(2), {}) --[[@as vim.api.keyset.cmd]] + task.output = vim.api.nvim_cmd(cmd, { output = true }) +end + +---@param task LazyTask +---@param build string +function B.shell(task, build) + local shell = vim.env.SHELL or vim.o.shell + local shell_args = shell:find("cmd.exe", 1, true) and "/c" or "-c" + + task:spawn(shell, { + args = { shell_args, build }, + cwd = task.plugin.dir, + }) +end + M.build = { ---@param opts? {force:boolean} skip = function(plugin, opts) if opts and opts.force then return false end - return not (plugin._.dirty and (plugin.build or get_build_file(plugin))) + return not ((plugin._.dirty or plugin._.build) and (plugin.build or get_build_file(plugin))) end, run = function(self) vim.cmd([[silent! runtime plugin/rplugin.vim]]) - Loader.load(self.plugin, { task = "build" }) + if self.plugin.build ~= "rockspec" then + Loader.load(self.plugin, { task = "build" }) + end local builders = self.plugin.build @@ -35,39 +77,29 @@ M.build = { return end - local build_file = get_build_file(self.plugin) - if build_file then - if builders then - if Config.options.build.warn_on_override then - Util.warn( - ("Plugin **%s** provides its own build script, but you also defined a `build` command.\nThe `build.lua` file will not be used"):format( - self.plugin.name - ) - ) - end - else - builders = function() - Loader.source(build_file) - end - end - end + builders = builders or get_build_file(self.plugin) + 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 }) - elseif type(build) == "function" then - build(self.plugin) + if type(build) == "function" then + self:async(function() + build(self.plugin) + end) + elseif build == "rockspec" then + B.rockspec(self) + elseif build:sub(1, 1) == ":" then + B.cmd(self, build) + elseif build:match("%.lua$") then + local file = self.plugin.dir .. "/" .. build + local chunk, err = loadfile(file) + if not chunk or err then + error(err) + end + self:async(chunk) else - local shell = vim.env.SHELL or vim.o.shell - local shell_args = shell:find("cmd.exe", 1, true) and "/c" or "-c" - - self:spawn(shell, { - args = { shell_args, build }, - cwd = self.plugin.dir, - }) + B.shell(self, build) end end end diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 755c1cd..813b4d9 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -231,6 +231,18 @@ function M.markdown(msg, opts) ) end +---@async +---@param ms number +function M.sleep(ms) + local continue = false + vim.defer_fn(function() + continue = true + end, ms) + while not continue do + coroutine.yield() + end +end + function M._dump(value, result) local t = type(value) if t == "number" or t == "boolean" then From b73c57ed9ec8e63bbb867d21a3f3a865224b25d4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 14:27:29 +0200 Subject: [PATCH 539/815] fix(luarocks): cleanup luarocks when deleting a plugin --- lua/lazy/manage/task/fs.lua | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/lua/lazy/manage/task/fs.lua b/lua/lazy/manage/task/fs.lua index c99c8bf..3401c29 100644 --- a/lua/lazy/manage/task/fs.lua +++ b/lua/lazy/manage/task/fs.lua @@ -4,6 +4,19 @@ local Util = require("lazy.util") ---@type table local M = {} +local function rm(dir) + local stat = vim.uv.fs_lstat(dir) + assert(stat and stat.type == "directory", dir .. " should be a directory!") + Util.walk(dir, function(path, _, type) + if type == "directory" then + vim.uv.fs_rmdir(path) + else + vim.uv.fs_unlink(path) + end + end) + vim.uv.fs_rmdir(dir) +end + M.clean = { skip = function(plugin) return plugin._.is_local @@ -11,18 +24,12 @@ M.clean = { run = function(self) local dir = self.plugin.dir:gsub("/+$", "") assert(dir:find(Config.options.root, 1, true) == 1, self.plugin.dir .. " should be under packpath!") + rm(dir) - local stat = vim.uv.fs_lstat(dir) - assert(stat and stat.type == "directory", self.plugin.dir .. " should be a directory!") - - Util.walk(dir, function(path, _, type) - if type == "directory" then - vim.uv.fs_rmdir(path) - else - vim.uv.fs_unlink(path) - end - end) - vim.uv.fs_rmdir(dir) + local rock_root = Config.options.rocks.root .. "/" .. self.plugin.name + if vim.uv.fs_stat(rock_root) then + rm(rock_root) + end self.plugin._.installed = false end, From fd04bc62f95fd26de7a6df4ad5a8088e88e35626 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Jun 2024 13:12:26 +0000 Subject: [PATCH 540/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 86 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 61 insertions(+), 25 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index ed9bcad..b31fb4e 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -36,7 +36,9 @@ Table of Contents *lazy.nvim-table-of-contents* - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 📚 Plugin Developers |lazy.nvim-📚-plugin-developers| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| 9. Links |lazy.nvim-links| ============================================================================== @@ -46,19 +48,28 @@ Table of Contents *lazy.nvim-table-of-contents* 11.X *lazy.nvim-📰-what’s-new?-11.x* - **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at lazy.nvim . The GitHub - `README.md` has been updated to point to the new website. The `vimdoc` contains - all the information that is available on the website. + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. - **Spec Resolution & Merging**: the code that resolves a final spec from a plugin’s fragments has been rewritten. This should be a tiny bit faster, but more importantly, fixes some issues and is easier to maintain. -- `rocks`: specs can now specify a list of rocks (luarocks - ) that should be installed. - Packages can now specify their dependencies and configuration using one of: - **Lazy**: `lazy.lua` file - **Rockspec**: luarocks `*-scm-1.rockspec` file - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. ============================================================================== @@ -235,9 +246,9 @@ SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - ----------------------------------------------------------------------------------------------------- + ---------------------------------------------------------------------------------------------------- Property Type Description - ---------- ----------------------------- ------------------------------------------------------------ + ---------- ----------------------------- ----------------------------------------------------------- init fun(LazyPlugin) init functions are always executed during startup opts table or opts should be a table (will be merged with parent specs), @@ -258,15 +269,8 @@ SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* config() build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - a list of build commands Before running build, a plugin is first loaded. If it’s a - string it will be run as a shell command. When prefixed with - : it is a Neovim command. You can also specify a list to - executed multiple build commands. Some plugins provide their - own build.lua which is automatically used by lazy. So no - need to specify a build step for those plugins. - - rocks string[]? Add any luarocks dependencies. - ----------------------------------------------------------------------------------------------------- + a list of build commands See Building for more information. + ---------------------------------------------------------------------------------------------------- SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* @@ -535,8 +539,8 @@ dependencies and configuration. Syntax is the same as any plugin spec. ROCKSPEC *lazy.nvim-📦-packages-rockspec* -When a plugin contains a `*-scm-1.rockspec` file, **lazy.nvim** will -automatically load its `rocks` dependencies. +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. PACKSPEC *lazy.nvim-📦-packages-packspec* @@ -1175,17 +1179,49 @@ spec. ============================================================================== -8. 📚 Plugin Developers *lazy.nvim-📚-plugin-developers* +8. 🔥 Developers *lazy.nvim-🔥-developers* To make it easier for users to install your plugin, you can include a package spec in your repo. -If your plugin needs a build step, you can specify this in your **package -file**, or create a file `build.lua` or `build/init.lua` in the root of your -repo. This file will be loaded when the plugin is installed or updated. -This makes it easier for users, as they no longer need to specify a `build` -command. +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(status_msg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(status_msg)` to show progress. Yielding will also schedule the +next `coroutine.resume()` to run in the next tick, so you can do long-running +tasks without blocking Neovim. + ============================================================================== 9. Links *lazy.nvim-links* From dbffad6f44674a3c1b23c649a0abab299d7349d8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 16:42:57 +0200 Subject: [PATCH 541/815] fix(fragments): prevent adding the same spec instance more than once --- lua/lazy/core/fragments.lua | 40 ++++++++++++++++++++++--------------- lua/lazy/core/meta.lua | 13 ++++++------ lua/lazy/core/plugin.lua | 19 +++++++++--------- lua/lazy/core/util.lua | 14 +++++++++++++ lua/lazy/pkg/init.lua | 16 +++++++++++---- 5 files changed, 65 insertions(+), 37 deletions(-) diff --git a/lua/lazy/core/fragments.lua b/lua/lazy/core/fragments.lua index 1ca018c..e0e6723 100644 --- a/lua/lazy/core/fragments.lua +++ b/lua/lazy/core/fragments.lua @@ -1,13 +1,5 @@ local Config = require("lazy.core.config") - -local M = {} - -M._fid = 0 - -local function next_id() - M._fid = M._fid + 1 - return M._fid -end +local Util = require("lazy.core.util") --- This class is used to manage the fragments of a plugin spec. --- It keeps track of the fragments and their relations to other fragments. @@ -17,30 +9,39 @@ end ---@field frag_stack number[] ---@field dep_stack number[] ---@field dirty table +---@field plugins table ---@field spec LazySpecLoader -local F = {} +local M = {} + +M._fid = 0 + +local function next_id() + M._fid = M._fid + 1 + return M._fid +end ---@param spec LazySpecLoader ---@return LazyFragments function M.new(spec) - local self = setmetatable({}, { __index = F }) + local self = setmetatable({}, { __index = M }) self.fragments = {} self.frag_stack = {} self.dep_stack = {} self.spec = spec self.dirty = {} + self.plugins = {} return self end ---@param id number -function F:get(id) +function M:get(id) return self.fragments[id] end --- Remove a fragment and all its children. --- This will also remove the fragment from its parent's children list. ---@param id number -function F:del(id) +function M:del(id) -- del fragment local fragment = self.fragments[id] if not fragment then @@ -55,13 +56,13 @@ function F:del(id) local parent = self.fragments[pid] if parent.frags then ---@param fid number - parent.frags = vim.tbl_filter(function(fid) + parent.frags = Util.filter(function(fid) return fid ~= id end, parent.frags) end if parent.deps then ---@param fid number - parent.deps = vim.tbl_filter(function(fid) + parent.deps = Util.filter(function(fid) return fid ~= id end, parent.deps) end @@ -81,8 +82,15 @@ end --- Add a fragment to the fragments list. --- This also resolves its name, url, dir, dependencies and child specs. ---@param plugin LazyPluginSpec -function F:add(plugin) +function M:add(plugin) + if self.plugins[plugin] then + return self.fragments[self.plugins[plugin]] + end + local id = next_id() + setmetatable(plugin, nil) + + self.plugins[plugin] = id local pid = self.frag_stack[#self.frag_stack] diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 43bd642..679a16f 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -33,8 +33,7 @@ function M:load_pkgs() if not Config.options.pkg.enabled then return end - local specs = Pkg.get() - for dir, pkg in pairs(specs) do + for _, pkg in ipairs(Pkg.get()) do local meta, fragment = self:add(pkg.spec) if meta and fragment then meta._.pkg = pkg @@ -44,7 +43,7 @@ function M:load_pkgs() frag.spec.optional = true end -- keep track of the top-level package fragment - self.pkgs[dir] = fragment.id + self.pkgs[pkg.dir] = fragment.id end end end @@ -128,7 +127,7 @@ function M:rebuild() -- fragment was deleted, so remove it from plugin self.frag_to_meta[fid] = nil ---@param f number - meta._.frags = vim.tbl_filter(function(f) + meta._.frags = Util.filter(function(f) return f ~= fid end, meta._.frags) -- if no fragments left, delete plugin @@ -167,10 +166,10 @@ function M:_rebuild(name) assert(#plugin._.frags > 0, "no fragments found for plugin " .. name) ---@type table - local done = {} + local added = {} for _, fid in ipairs(plugin._.frags) do - if not done[fid] then - done[fid] = true + if not added[fid] then + added[fid] = true local fragment = self.fragments:get(fid) assert(fragment, "fragment " .. fid .. " not found, for plugin " .. name) ---@diagnostic disable-next-line: no-unknown diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 875b580..e93555c 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -170,10 +170,10 @@ function Spec:import(spec) self.importing = nil return self:error( "Invalid spec module: `" - .. modname - .. "`\nExpected a `table` of specs, but a `" - .. type(mod) - .. "` was returned instead" + .. modname + .. "`\nExpected a `table` of specs, but a `" + .. type(mod) + .. "` was returned instead" ) end self:normalize(mod) @@ -216,11 +216,11 @@ function M.update_state() plugin._ = plugin._ or {} if plugin.lazy == nil then local lazy = plugin._.dep - or Config.options.defaults.lazy - or plugin.event - or plugin.keys - or plugin.ft - or plugin.cmd + or Config.options.defaults.lazy + or plugin.event + or plugin.keys + or plugin.ft + or plugin.cmd plugin.lazy = lazy and true or false end if plugin.dir:find(Config.options.root, 1, true) == 1 then @@ -342,7 +342,6 @@ function M.load() Config.plugins[name]._ = plugin._ Config.plugins[name]._.dep = new_state.dep Config.plugins[name]._.frags = new_state.frags - -- Config.plugins[name]._.tasks = new_state.tasks end end Util.track() diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index d4fa47c..0504dd8 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -28,6 +28,20 @@ function M.track(data, time) end end +---@generic T +---@param list T[] +---@param fn fun(v: T):boolean? +---@return T[] +function M.filter(fn, list) + local ret = {} + for _, v in ipairs(list) do + if fn(v) then + table.insert(ret, v) + end + end + return ret +end + ---@generic F: fun() ---@param data (string|{[string]:string})? ---@param fn F diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index 48e755c..0037b26 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -25,7 +25,7 @@ M.dirty = false ---@field pkgs LazyPkg[] ---@field version number ----@type table? +---@type LazyPkg[]? M.cache = nil function M.update() @@ -65,6 +65,9 @@ function M.update() end end end + table.sort(ret.pkgs, function(a, b) + return a.name < b.name + end) local code = "return " .. Util.dump(ret) vim.fn.mkdir(vim.fn.fnamemodify(Config.options.pkg.cache, ":h"), "p") Util.write_file(Config.options.pkg.cache, code) @@ -91,8 +94,8 @@ local function _load() end -- wrap in the scope of the plugin pkg.spec = { pkg.name, specs = pkg.spec } - M.cache[pkg.dir] = pkg end + M.cache = ret.pkgs end end, "Error loading pkg:") end @@ -107,10 +110,15 @@ end ---@param dir string ---@return LazyPkg? ----@overload fun():table +---@overload fun():LazyPkg[] function M.get(dir) if dir then - return M.cache[dir] + for _, pkg in ipairs(M.cache) do + if pkg.dir == dir then + return pkg + end + end + return end return M.cache end From 9a6c21982638b6e2ea498514baee9186c0e60d82 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 17:07:25 +0200 Subject: [PATCH 542/815] fix(rocks): only build rockspec when it has deps or an advanced build step --- lua/lazy/pkg/init.lua | 2 +- lua/lazy/pkg/rockspec.lua | 43 ++++++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index 0037b26..2d5b7d9 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -2,7 +2,7 @@ local Config = require("lazy.core.config") local Util = require("lazy.util") local M = {} -M.VERSION = 8 +M.VERSION = 10 M.dirty = false ---@class LazyPkg diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index ba4a692..58fc2c5 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -12,6 +12,7 @@ M.skip = { "lua" } ---@field package string ---@field version string ---@field dependencies string[] +---@field build? {build_type?: string, modules?: any[]} ---@param plugin LazyPlugin ---@return LazyPkgSpec? @@ -37,30 +38,44 @@ function M.get(plugin) end load() + if not rockspec then + return + end + + local has_lua = not not vim.uv.fs_stat(plugin.dir .. "/lua") + ---@param dep string local rocks = vim.tbl_filter(function(dep) local name = dep:gsub("%s.*", "") return not vim.tbl_contains(M.skip, name) - end, rockspec and rockspec.dependencies or {}) + end, rockspec.dependencies or {}) - local use = #rocks > 0 - use = true + local use = not has_lua + or #rocks > 0 + or ( + rockspec.build + and rockspec.build.build_type + and rockspec.build.build_type ~= "none" + and not (rockspec.build.build_type == "builtin" and not rockspec.build.modules) + ) + + if not use then + return + end local lazy = nil - if not vim.uv.fs_stat(plugin.dir .. "/lua") then + if not has_lua then lazy = false end - return use - and { - file = vim.fn.fnamemodify(rockspec_file, ":t"), - spec = { - plugin.name, - build = "rockspec", - lazy = lazy, - }, - } - or nil + return { + file = vim.fn.fnamemodify(rockspec_file, ":t"), + spec = { + plugin.name, + build = "rockspec", + lazy = lazy, + }, + } or nil end return M From eb26e95debd7056d8c7e6e2859b5a21e522b11c4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Jun 2024 15:14:48 +0000 Subject: [PATCH 543/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b31fb4e..d16353c 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -542,6 +542,12 @@ ROCKSPEC *lazy.nvim-📦-packages-rockspec* When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically build the rock and its dependencies. +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + PACKSPEC *lazy.nvim-📦-packages-packspec* @@ -736,12 +742,6 @@ will be added to the plugin’s spec. skip_if_doc_exists = true, }, state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - build = { - -- Plugins can provide a `build.lua` file that will be executed when the plugin is installed - -- or updated. When the plugin spec also has a `build` command, the plugin's `build.lua` not be - -- executed. In this case, a warning message will be shown. - warn_on_override = true, - }, -- Enable profiling of lazy.nvim. This will add some overhead, -- so only enable this when you are debugging lazy.nvim profiling = { From c33b9fbf8d314ac972772792391a5ddd3df933e8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 17:16:50 +0200 Subject: [PATCH 544/815] chore(main): release 11.0.0 (#1537) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 30 +++++++++++++++++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 5596560..4981afa 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "10.24.3" + ".": "11.0.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ad4080..61c2a44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,35 @@ # Changelog +## [11.0.0](https://github.com/folke/lazy.nvim/compare/v10.24.3...v11.0.0) (2024-06-24) + + +### ⚠ BREAKING CHANGES + +* new docs for v11.0 + +### Features + +* added support for plugin packages by lazy, rockspec and packspec ([3be55a4](https://github.com/folke/lazy.nvim/commit/3be55a46158cde17e2b853e531d260f3738a5346)) +* **build:** build files and functions are now async. use coroutine.yield to interrupt and report progress ([368747b](https://github.com/folke/lazy.nvim/commit/368747bc9a314b4f0745547ebdcc3fbc4d100c0a)) +* luarocks support ([f1ba2e3](https://github.com/folke/lazy.nvim/commit/f1ba2e3d057ae5c03d04134a9d538d0b2251f13b)) +* **meta:** check for dir changes for plugins already added to the rtp ([ee2ca39](https://github.com/folke/lazy.nvim/commit/ee2ca39f672a2d6f4cbb683b525e6b3d91f3fc0c)) +* new docs for v11.0 ([183f59e](https://github.com/folke/lazy.nvim/commit/183f59e2e85dea0c38ed7d16c7c7e543c0b739c7)) +* packspec ([8eba74c](https://github.com/folke/lazy.nvim/commit/8eba74c3fc41e1a364225f744022f8b3ff11d796)) +* **pkg:** import package specs in the scope of the plugin ([c1912e2](https://github.com/folke/lazy.nvim/commit/c1912e23481ba72a8d8f7a5c736f5e2547e6853e)) +* rewrite of spec resolving ([75ffe56](https://github.com/folke/lazy.nvim/commit/75ffe56f70faac43f077796b91178d2f1419f8ce)) +* spec.rocks is no longer needed & added support for installing any luarock ([fcfd548](https://github.com/folke/lazy.nvim/commit/fcfd54835da5af64c6046060f4db62c4626d209c)) + + +### Bug Fixes + +* **fragments:** prevent adding the same spec instance more than once ([dbffad6](https://github.com/folke/lazy.nvim/commit/dbffad6f44674a3c1b23c649a0abab299d7349d8)) +* **luarocks:** cleanup luarocks when deleting a plugin ([b73c57e](https://github.com/folke/lazy.nvim/commit/b73c57ed9ec8e63bbb867d21a3f3a865224b25d4)) +* **pkg:** automatically update pkgs when editing a pkg file ([7b6ddbf](https://github.com/folke/lazy.nvim/commit/7b6ddbfc137ad5d8b178a3bbf5a1338630f30625)) +* **pkg:** correctly pre-load package specs and remove them when needed during resolve ([4326d4b](https://github.com/folke/lazy.nvim/commit/4326d4b487d4facc19b375ca30cd633cf56d88ed)) +* **pkg:** make sure state dir exists ([3515cb5](https://github.com/folke/lazy.nvim/commit/3515cb518f61c02b41cd3a8d8135c9a5862a982f)) +* **pkg:** versioning and reload specs when pkg-cache is dirty ([fd8229d](https://github.com/folke/lazy.nvim/commit/fd8229d6e312e83d6bafda256adf0e650b13ca01)) +* **rocks:** only build rockspec when it has deps or an advanced build step ([9a6c219](https://github.com/folke/lazy.nvim/commit/9a6c21982638b6e2ea498514baee9186c0e60d82)) + ## [10.24.3](https://github.com/folke/lazy.nvim/compare/v10.24.2...v10.24.3) (2024-06-23) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 0919cab..7aa69b4 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -195,7 +195,7 @@ M.defaults = { debug = false, } -M.version = "10.24.3" -- x-release-please-version +M.version = "11.0.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 146de4e801f9169e79052a51365eaae789094611 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 17:36:59 +0200 Subject: [PATCH 545/815] fix(rocks): dont trigger rebuild for luarocks when build is overriden --- lua/lazy/core/plugin.lua | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index e93555c..f409294 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -170,10 +170,10 @@ function Spec:import(spec) self.importing = nil return self:error( "Invalid spec module: `" - .. modname - .. "`\nExpected a `table` of specs, but a `" - .. type(mod) - .. "` was returned instead" + .. modname + .. "`\nExpected a `table` of specs, but a `" + .. type(mod) + .. "` was returned instead" ) end self:normalize(mod) @@ -216,11 +216,11 @@ function M.update_state() plugin._ = plugin._ or {} if plugin.lazy == nil then local lazy = plugin._.dep - or Config.options.defaults.lazy - or plugin.event - or plugin.keys - or plugin.ft - or plugin.cmd + or Config.options.defaults.lazy + or plugin.event + or plugin.keys + or plugin.ft + or plugin.cmd plugin.lazy = lazy and true or false end if plugin.dir:find(Config.options.root, 1, true) == 1 then @@ -264,7 +264,7 @@ function M.update_rocks_state() end) for _, plugin in pairs(Config.plugins) do - if plugin._.pkg and plugin._.pkg.source == "rockspec" then + if plugin._.pkg and plugin._.pkg.source == "rockspec" and plugin.build == "rockspec" then plugin._.build = not installed[plugin.name] end end From 7f52977c1dda8fd1301f5d8a78ce154d52fd82be Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 17:39:01 +0200 Subject: [PATCH 546/815] chore(main): release 11.0.1 (#1538) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 4981afa..c656ffb 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.0.0" + ".": "11.0.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 61c2a44..060e1cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.0.1](https://github.com/folke/lazy.nvim/compare/v11.0.0...v11.0.1) (2024-06-24) + + +### Bug Fixes + +* **rocks:** dont trigger rebuild for luarocks when build is overriden ([146de4e](https://github.com/folke/lazy.nvim/commit/146de4e801f9169e79052a51365eaae789094611)) + ## [11.0.0](https://github.com/folke/lazy.nvim/compare/v10.24.3...v11.0.0) (2024-06-24) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 7aa69b4..3c81704 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -195,7 +195,7 @@ M.defaults = { debug = false, } -M.version = "11.0.0" -- x-release-please-version +M.version = "11.0.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From cd3581efd125c3a246a730cd0a2f7683461f486d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Jun 2024 15:42:27 +0000 Subject: [PATCH 547/815] chore(build): auto-generate docs --- README.md | 2 ++ doc/lazy.nvim.txt | 2 ++ 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index a950b94..7403668 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,8 @@ - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) - a [Nerd Font](https://www.nerdfonts.com/) **_(optional)_** +- [luarocks](https://luarocks.org/) to install rockspecs. + You can remove `rockspec` from `opts.pkg.sources` to disable this feature. ## 🚀 Getting Started diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index d16353c..a81b0f5 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -104,6 +104,8 @@ Table of Contents *lazy.nvim-table-of-contents* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) - a Nerd Font **(optional)** +- luarocks to install rockspecs. + You can remove `rockspec` from `opts.pkg.sources` to disable this feature. ============================================================================== From 79afa96b909051be1a782865171a91edd2ca71fc Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 17:46:59 +0200 Subject: [PATCH 548/815] style: remove pkg.versions --- lua/lazy/core/config.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 3c81704..831695a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -38,7 +38,6 @@ M.defaults = { pkg = { enabled = true, cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources -- the first package source that is found for a plugin will be used. sources = { "lazy", From 79c2efc8d828a8ac45495624c51ca081a3243415 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Jun 2024 15:49:09 +0000 Subject: [PATCH 549/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index a81b0f5..22e4d4b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -59,6 +59,29 @@ Table of Contents *lazy.nvim-table-of-contents* - **Lazy**: `lazy.lua` file - **Rockspec**: luarocks `*-scm-1.rockspec` file - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < - Packages are not limited to just Neovim plugins. You can install any **luarocks** package, like: >lua From 0f45c0d0623b4850716898a5e399c844466690f6 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 17:50:27 +0200 Subject: [PATCH 550/815] fix(health): added luarocks check to health --- lua/lazy/health.lua | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 6202de6..42d7f62 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -13,9 +13,15 @@ function M.check() start("lazy.nvim") if vim.fn.executable("git") == 1 then - ok("Git installed") + ok("'git' installed") else - error("Git not installed?") + error("'git' not installed?") + end + + if vim.fn.executable("luarocks") == 1 then + ok("'luarocks' installed") + else + error("'luarocks' not installed") end local sites = vim.opt.packpath:get() From 656d3d1f5b5910e50af3d67286999ff7088ebfb6 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 18:02:54 +0200 Subject: [PATCH 551/815] feat: show rockspec deps in plugin details --- lua/lazy/pkg/rockspec.lua | 19 +++++++++++++++++-- lua/lazy/view/render.lua | 5 +++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 58fc2c5..3d0745e 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -1,12 +1,27 @@ --# selene:allow(incorrect_standard_library_use) - -local Util = require("lazy.core.util") +local Config = require("lazy.core.config") +local Util = require("lazy.util") local M = {} M.dev_suffix = "-1.rockspec" M.skip = { "lua" } +---@param plugin LazyPlugin +function M.deps(plugin) + local root = Config.options.rocks.root .. "/" .. plugin.name + local manifest_file = root .. "/lib/luarocks/rocks-5.1/manifest" + local manifest = {} + local ok = pcall(function() + local load, err = loadfile(manifest_file, "t", manifest) + if not load then + error(err) + end + load() + end) + return manifest and vim.tbl_keys(manifest.repository or {}) +end + ---@class RockSpec ---@field rockspec_format string ---@field package string diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index a34456c..7d91dd8 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -511,6 +511,11 @@ function M:details(plugin) table.insert(props, { "commit", git.commit:sub(1, 7), "LazyCommit" }) end end + local rocks = require("lazy.pkg.rockspec").deps(plugin) + if not vim.tbl_isempty(rocks) then + table.insert(props, { "rocks", vim.inspect(rocks) }) + end + if Util.file_exists(plugin.dir .. "/README.md") then table.insert(props, { "readme", "README.md" }) end From 105d4805ad58875d0b0fafe1185679539b8bc69a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 19:38:33 +0200 Subject: [PATCH 552/815] fix(runner): sync package specs after installing and before building --- lua/lazy/core/plugin.lua | 1 + lua/lazy/manage/init.lua | 18 +++++++++--- lua/lazy/manage/runner.lua | 59 ++++++++++++++++++++++++++------------ lua/lazy/pkg/rockspec.lua | 4 +-- 4 files changed, 58 insertions(+), 24 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index f409294..ecf6d64 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -342,6 +342,7 @@ function M.load() Config.plugins[name]._ = plugin._ Config.plugins[name]._.dep = new_state.dep Config.plugins[name]._.frags = new_state.frags + Config.plugins[name]._.pkg = new_state.pkg end end Util.track() diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 01c9a54..9737538 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -83,7 +83,13 @@ function M.install(opts) "git.clone", { "git.checkout", lockfile = opts.lockfile }, "plugin.docs", - "wait", + { + "wait", + sync = function() + require("lazy.pkg").update() + Plugin.load() + end, + }, "plugin.build", }, plugins = function(plugin) @@ -92,7 +98,6 @@ function M.install(opts) }, opts):wait(function() require("lazy.manage.lock").update() require("lazy.help").update() - require("lazy.pkg").update() end) end @@ -107,7 +112,13 @@ function M.update(opts) "git.status", { "git.checkout", lockfile = opts.lockfile }, "plugin.docs", - "wait", + { + "wait", + sync = function() + require("lazy.pkg").update() + Plugin.load() + end, + }, "plugin.build", { "git.log", updated = true }, }, @@ -117,7 +128,6 @@ function M.update(opts) }, opts):wait(function() require("lazy.manage.lock").update() require("lazy.help").update() - require("lazy.pkg").update() end) end -- diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 7e3a39d..930dbc8 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -8,13 +8,15 @@ local Util = require("lazy.util") ---@field concurrency? number ---@alias PipelineStep {task:string, opts?:TaskOptions} ----@alias LazyRunnerTask {co:thread, status: {task?:LazyTask, waiting?:boolean}, plugin: LazyPlugin} +---@alias LazyRunnerTask {co:thread, status: {task?:LazyTask, waiting?:boolean}, plugin: string} ---@class Runner ----@field _plugins LazyPlugin[] +---@field _plugins string[] ---@field _running LazyRunnerTask[] ---@field _pipeline PipelineStep[] +---@field _sync PipelineStep[] ---@field _on_done fun()[] +---@field _syncing boolean ---@field _opts RunnerOpts local Runner = {} @@ -24,13 +26,11 @@ function Runner.new(opts) self._opts = opts or {} local plugins = self._opts.plugins - if type(plugins) == "function" then - self._plugins = vim.tbl_filter(plugins, Config.plugins) - else - self._plugins = plugins or Config.plugins - end + self._plugins = vim.tbl_map(function(plugin) + return plugin.name + end, type(plugins) == "function" and vim.tbl_filter(plugins, Config.plugins) or plugins or Config.plugins) table.sort(self._plugins, function(a, b) - return a.name < b.name + return a < b end) self._running = {} self._on_done = {} @@ -40,6 +40,10 @@ function Runner.new(opts) return type(step) == "string" and { task = step } or { task = step[1], opts = step } end, self._opts.pipeline) + self._sync = vim.tbl_filter(function(step) + return step.task == "wait" + end, self._pipeline) + return self end @@ -57,14 +61,31 @@ function Runner:_resume(entry) end function Runner:resume(waiting) + if self._syncing then + return true + end if waiting then - for _, entry in ipairs(self._running) do - if entry.status then - if entry.status.waiting then - entry.status.waiting = false - entry.plugin._.working = true + local sync = self._sync[1] + table.remove(self._sync, 1) + if sync then + self._syncing = true + vim.schedule(function() + if sync.opts and type(sync.opts.sync) == "function" then + sync.opts.sync(self) end - end + for _, entry in ipairs(self._running) do + if entry.status then + if entry.status.waiting then + entry.status.waiting = false + local plugin = Config.plugins[entry.plugin] + if plugin then + plugin._.working = true + end + end + end + end + self._syncing = false + end) end end local running = 0 @@ -78,7 +99,7 @@ function Runner:resume(waiting) end end end - return running > 0 or (not waiting and self:resume(true)) + return self._syncing or running > 0 or (not waiting and self:resume(true)) end function Runner:start() @@ -88,7 +109,7 @@ function Runner:start() if ok then table.insert(self._running, { co = co, status = {}, plugin = plugin }) else - Util.error("Could not start tasks for " .. plugin.name .. "\n" .. err) + Util.error("Could not start tasks for " .. plugin .. "\n" .. err) end end @@ -107,8 +128,9 @@ function Runner:start() end ---@async ----@param plugin LazyPlugin -function Runner:run_pipeline(plugin) +---@param name string +function Runner:run_pipeline(name) + local plugin = Config.plugins[name] plugin._.working = true coroutine.yield() for _, step in ipairs(self._pipeline) do @@ -117,6 +139,7 @@ function Runner:run_pipeline(plugin) coroutine.yield({ waiting = true }) plugin._.working = true else + plugin = Config.plugins[name] or plugin local task = self:queue(plugin, step.task, step.opts) if task then coroutine.yield({ task = task }) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 3d0745e..72defae 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -12,14 +12,14 @@ function M.deps(plugin) local root = Config.options.rocks.root .. "/" .. plugin.name local manifest_file = root .. "/lib/luarocks/rocks-5.1/manifest" local manifest = {} - local ok = pcall(function() + pcall(function() local load, err = loadfile(manifest_file, "t", manifest) if not load then error(err) end load() end) - return manifest and vim.tbl_keys(manifest.repository or {}) + return vim.tbl_keys(manifest.repository or {}) end ---@class RockSpec From 07c067a1a82bb0988179e1887bba9df4721b3ea7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 19:44:07 +0200 Subject: [PATCH 553/815] feat: make it easier to disable luarocks --- lua/lazy/core/config.lua | 3 ++- lua/lazy/pkg/init.lua | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 831695a..bb0e2fa 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -41,11 +41,12 @@ M.defaults = { -- the first package source that is found for a plugin will be used. sources = { "lazy", - "rockspec", + "rockspec", -- will only be used when rocks.enabled is true "packspec", }, }, rocks = { + enabled = true, root = vim.fn.stdpath("data") .. "/lazy-rocks", server = "https://nvim-neorocks.github.io/rocks-binaries/", }, diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index 2d5b7d9..ee0daa4 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -32,10 +32,12 @@ function M.update() ---@type LazyPkgSource[] local sources = {} for _, s in ipairs(Config.options.pkg.sources) do - sources[#sources + 1] = { - name = s, - get = require("lazy.pkg." .. s).get, - } + if s ~= "rockspec" or Config.options.rocks.enabled then + sources[#sources + 1] = { + name = s, + get = require("lazy.pkg." .. s).get, + } + end end ---@type LazyPkgCache From e3ee51b6680a116649da56f6c651d53c3e47be4e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 19:44:22 +0200 Subject: [PATCH 554/815] fix(health): show missing luarocks as warning --- lua/lazy/health.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 42d7f62..3bfc3f5 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -21,7 +21,7 @@ function M.check() if vim.fn.executable("luarocks") == 1 then ok("'luarocks' installed") else - error("'luarocks' not installed") + warn("'luarocks' not installed") end local sites = vim.opt.packpath:get() From bd397ff1e3c5411ca4adbdbb5cc54b86b5768a6f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Jun 2024 17:45:13 +0000 Subject: [PATCH 555/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 22e4d4b..ab6a6f4 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -68,11 +68,12 @@ Table of Contents *lazy.nvim-table-of-contents* -- the first package source that is found for a plugin will be used. sources = { "lazy", - "rockspec", + "rockspec", -- will only be used when rocks.enabled is true "packspec", }, }, rocks = { + enabled = true, root = vim.fn.stdpath("data") .. "/lazy-rocks", server = "https://nvim-neorocks.github.io/rocks-binaries/", }, From 77edda11bf82864585875cecb0c370e31bb06a85 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 19:55:09 +0200 Subject: [PATCH 556/815] test: fixes --- lua/lazy/manage/runner.lua | 40 +++++++++++++++++++++++++------------- tests/manage/task_spec.lua | 2 +- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 930dbc8..9b766df 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -11,7 +11,7 @@ local Util = require("lazy.util") ---@alias LazyRunnerTask {co:thread, status: {task?:LazyTask, waiting?:boolean}, plugin: string} ---@class Runner ----@field _plugins string[] +---@field _plugins table ---@field _running LazyRunnerTask[] ---@field _pipeline PipelineStep[] ---@field _sync PipelineStep[] @@ -26,12 +26,17 @@ function Runner.new(opts) self._opts = opts or {} local plugins = self._opts.plugins - self._plugins = vim.tbl_map(function(plugin) - return plugin.name - end, type(plugins) == "function" and vim.tbl_filter(plugins, Config.plugins) or plugins or Config.plugins) - table.sort(self._plugins, function(a, b) - return a < b - end) + ---@type LazyPlugin[] + local pp = {} + if type(plugins) == "function" then + pp = vim.tbl_filter(plugins, Config.plugins) + else + pp = plugins or Config.plugins + end + self._plugins = {} + for _, plugin in ipairs(pp) do + self._plugins[plugin.name] = plugin + end self._running = {} self._on_done = {} @@ -47,6 +52,10 @@ function Runner.new(opts) return self end +function Runner:plugin(name) + return Config.plugins[name] or self._plugins[name] +end + ---@param entry LazyRunnerTask function Runner:_resume(entry) if entry.status.task and not entry.status.task:is_done() then @@ -77,7 +86,7 @@ function Runner:resume(waiting) if entry.status then if entry.status.waiting then entry.status.waiting = false - local plugin = Config.plugins[entry.plugin] + local plugin = self:plugin(entry.plugin) if plugin then plugin._.working = true end @@ -103,13 +112,16 @@ function Runner:resume(waiting) end function Runner:start() - for _, plugin in pairs(self._plugins) do + ---@type string[] + local names = vim.tbl_keys(self._plugins) + table.sort(names) + for _, name in pairs(names) do local co = coroutine.create(self.run_pipeline) - local ok, err = coroutine.resume(co, self, plugin) + local ok, err = coroutine.resume(co, self, name) if ok then - table.insert(self._running, { co = co, status = {}, plugin = plugin }) + table.insert(self._running, { co = co, status = {}, plugin = name }) else - Util.error("Could not start tasks for " .. plugin .. "\n" .. err) + Util.error("Could not start tasks for " .. name .. "\n" .. err) end end @@ -130,7 +142,7 @@ end ---@async ---@param name string function Runner:run_pipeline(name) - local plugin = Config.plugins[name] + local plugin = self:plugin(name) plugin._.working = true coroutine.yield() for _, step in ipairs(self._pipeline) do @@ -139,7 +151,7 @@ function Runner:run_pipeline(name) coroutine.yield({ waiting = true }) plugin._.working = true else - plugin = Config.plugins[name] or plugin + plugin = self:plugin(name) local task = self:queue(plugin, step.task, step.opts) if task then coroutine.yield({ task = task }) diff --git a/tests/manage/task_spec.lua b/tests/manage/task_spec.lua index 76608af..bbb8704 100644 --- a/tests/manage/task_spec.lua +++ b/tests/manage/task_spec.lua @@ -102,7 +102,7 @@ describe("task", function() task:start() assert(task:is_running()) task:wait() - assert(task.output == "foo\nbar\n" or task.output == "bar\nfoo\n") + assert(task.output == "foo\nbar\n" or task.output == "bar\nfoo\n", task.output) assert(done) assert(not task.error) end) From ae4881d36e7f589124f8eb7febfc6a8b58f8e027 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 20:03:00 +0200 Subject: [PATCH 557/815] fix(health): only check for luarocks when luarocks is enabled. --- lua/lazy/health.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 3bfc3f5..c0a8981 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -18,10 +18,12 @@ function M.check() error("'git' not installed?") end - if vim.fn.executable("luarocks") == 1 then - ok("'luarocks' installed") - else - warn("'luarocks' not installed") + if Config.options.rocks.enabled then + if vim.fn.executable("luarocks") == 1 then + ok("'luarocks' installed") + else + error("'luarocks' not installed. Either install it or set opts.rocks.enabled = false") + end end local sites = vim.opt.packpath:get() From b6b0c4c15c8a247eb7baace4f408b76d595c448a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 20:06:31 +0200 Subject: [PATCH 558/815] chore(main): release 11.1.0 (#1539) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 16 ++++++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index c656ffb..8d8b6a5 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.0.1" + ".": "11.1.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 060e1cd..b2af7be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## [11.1.0](https://github.com/folke/lazy.nvim/compare/v11.0.1...v11.1.0) (2024-06-24) + + +### Features + +* make it easier to disable luarocks ([07c067a](https://github.com/folke/lazy.nvim/commit/07c067a1a82bb0988179e1887bba9df4721b3ea7)) +* show rockspec deps in plugin details ([656d3d1](https://github.com/folke/lazy.nvim/commit/656d3d1f5b5910e50af3d67286999ff7088ebfb6)) + + +### Bug Fixes + +* **health:** added luarocks check to health ([0f45c0d](https://github.com/folke/lazy.nvim/commit/0f45c0d0623b4850716898a5e399c844466690f6)) +* **health:** only check for luarocks when luarocks is enabled. ([ae4881d](https://github.com/folke/lazy.nvim/commit/ae4881d36e7f589124f8eb7febfc6a8b58f8e027)) +* **health:** show missing luarocks as warning ([e3ee51b](https://github.com/folke/lazy.nvim/commit/e3ee51b6680a116649da56f6c651d53c3e47be4e)) +* **runner:** sync package specs after installing and before building ([105d480](https://github.com/folke/lazy.nvim/commit/105d4805ad58875d0b0fafe1185679539b8bc69a)) + ## [11.0.1](https://github.com/folke/lazy.nvim/compare/v11.0.0...v11.0.1) (2024-06-24) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index bb0e2fa..4d1aa2b 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -195,7 +195,7 @@ M.defaults = { debug = false, } -M.version = "11.0.1" -- x-release-please-version +M.version = "11.1.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 0081c95aeea1b758568834be1ccacee7299bfb47 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 20:22:57 +0200 Subject: [PATCH 559/815] style: allow false for build --- lua/lazy/types.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 4fd033c..0a10467 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -29,7 +29,7 @@ ---@field init? fun(self:LazyPlugin) Will always be run ---@field deactivate? fun(self:LazyPlugin) Unload/Stop a plugin ---@field config? fun(self:LazyPlugin, opts:table)|true Will be executed when loading the plugin ----@field build? string|async fun(self:LazyPlugin)|(string|async fun(self:LazyPlugin))[] +---@field build? false|string|async fun(self:LazyPlugin)|(string|async fun(self:LazyPlugin))[] ---@field opts? PluginOpts ---@class LazyPluginHandlers From 972baa615b89e84a67faa62f364c9bf2d18f1736 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 Jun 2024 18:23:56 +0000 Subject: [PATCH 560/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index ab6a6f4..e88747b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -272,9 +272,9 @@ SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - ---------------------------------------------------------------------------------------------------- + --------------------------------------------------------------------------------------------------- Property Type Description - ---------- ----------------------------- ----------------------------------------------------------- + ---------- ----------------------------- ---------------------------------------------------------- init fun(LazyPlugin) init functions are always executed during startup opts table or opts should be a table (will be merged with parent specs), @@ -285,18 +285,19 @@ SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default or true implementation will automatically run require(MAIN).setup(opts) if opts or config = true is set. - Lazy uses several heuristics to determine the plugin’s MAIN - module automatically based on the plugin’s name. See also - opts. To use the default implementation without opts set - config to true. + Lazy uses several heuristics to determine the plugin’s + MAIN module automatically based on the plugin’s name. See + also opts. To use the default implementation without opts + set config to true. main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. See - config() + opts(), in case it can not be determined automatically. + See config() build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - a list of build commands See Building for more information. - ---------------------------------------------------------------------------------------------------- + false or a list of build See Building for more information. + commands + --------------------------------------------------------------------------------------------------- SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* From 1446f6cfbb4ca0a7ee0baf3acc86ab5e4be5ab22 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 21:56:43 +0200 Subject: [PATCH 561/815] perf: minimize meta rebuild when loading specs --- lua/lazy/core/loader.lua | 10 ++++++++-- lua/lazy/core/meta.lua | 16 ++++++++++++++- lua/lazy/core/plugin.lua | 11 ++++++++-- lua/lazy/core/util.lua | 43 ++++++++++++++++++++++++++++++++-------- 4 files changed, 67 insertions(+), 13 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 6f426d9..7209362 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -524,7 +524,7 @@ function M.colorscheme(name) end function M.auto_load(modname, modpath) - local plugin = Plugin.find(modpath) + local plugin = Plugin.find(modpath, { fast = not M.did_handlers }) if plugin and modpath:find(plugin.dir, 1, true) == 1 then plugin._.rtp_loaded = true -- don't load if: @@ -545,8 +545,14 @@ end ---@param modname string function M.loader(modname) - local paths = Util.get_unloaded_rtp(modname) + local paths, cached = Util.get_unloaded_rtp(modname, { cache = true }) local ret = Cache.find(modname, { rtp = false, paths = paths })[1] + + if not ret and cached then + paths = Util.get_unloaded_rtp(modname) + ret = Cache.find(modname, { rtp = false, paths = paths })[1] + end + if ret then M.auto_load(modname, ret.modpath) local mod = package.loaded[modname] diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 679a16f..4645f1b 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -117,6 +117,14 @@ end --- Rebuild all plugins based on dirty fragments, --- or dirty plugins. Will remove plugins that no longer have fragments. function M:rebuild() + local frag_count = vim.tbl_count(self.fragments.dirty) + local plugin_count = vim.tbl_count(self.dirty) + if frag_count == 0 and plugin_count == 0 then + return + end + if Config.options.debug then + Util.track("rebuild plugins frags=" .. frag_count .. " plugins=" .. plugin_count) + end for fid in pairs(self.fragments.dirty) do local meta = self.frag_to_meta[fid] if meta then @@ -143,6 +151,9 @@ function M:rebuild() for n, _ in pairs(self.dirty) do self:_rebuild(n) end + if Config.options.debug then + Util.track() + end end --- Rebuild a single plugin. @@ -150,6 +161,10 @@ end --- This also resolves dependencies, dep, optional, dir, dev, and url. ---@param name string function M:_rebuild(name) + if not self.dirty[name] then + return + end + self.dirty[name] = nil local plugin = self.plugins[name] if not plugin or #plugin._.frags == 0 then self.plugins[name] = nil @@ -225,7 +240,6 @@ function M:_rebuild(name) setmetatable(plugin, { __index = super }) - self.dirty[plugin.name] = nil return plugin end diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index ecf6d64..062d5d2 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -362,17 +362,24 @@ end -- Finds the plugin that has this path ---@param path string -function M.find(path) +---@param opts? {fast?:boolean} +function M.find(path, opts) if not Config.spec then return end + opts = opts or {} local lua = path:find("/lua/", 1, true) if lua then local name = path:sub(1, lua - 1) local slash = name:reverse():find("/", 1, true) if slash then name = name:sub(#name - slash + 2) - return name and Config.plugins[name] or Config.spec.plugins[name] or nil + if name then + if opts.fast then + return Config.spec.meta.plugins[name] + end + return Config.spec.plugins[name] + end end end end diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 0504dd8..9a65a85 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -238,18 +238,33 @@ function M.walkmods(root, fn, modname) end ---@param modname string -function M.get_unloaded_rtp(modname) - modname = modname:gsub("/", ".") - local idx = modname:find(".", 1, true) - local topmod = idx and modname:sub(1, idx - 1) or modname - topmod = M.normname(topmod) +---@return string +function M.topmod(modname) + return modname:match("^[^./]+") or modname +end +---@type table +M.unloaded_cache = {} + +---@param modname string +---@param opts? {cache?:boolean} +function M.get_unloaded_rtp(modname, opts) + opts = opts or {} + + local topmod = M.topmod(modname) + if opts.cache and M.unloaded_cache[topmod] then + return M.unloaded_cache[topmod], true + end + + local norm = M.normname(topmod) + + ---@type string[] local rtp = {} local Config = require("lazy.core.config") if Config.spec then for _, plugin in pairs(Config.spec.plugins) do if not (plugin._.loaded or plugin.module == false) then - if topmod == M.normname(plugin.name) then + if norm == M.normname(plugin.name) then table.insert(rtp, 1, plugin.dir) else table.insert(rtp, plugin.dir) @@ -257,15 +272,27 @@ function M.get_unloaded_rtp(modname) end end end - return rtp + M.unloaded_cache[topmod] = rtp + return rtp, false end function M.find_root(modname) + local paths, cached = M.get_unloaded_rtp(modname, { cache = true }) + local ret = require("lazy.core.cache").find(modname, { rtp = true, - paths = M.get_unloaded_rtp(modname), + paths = paths, patterns = { "", ".lua" }, })[1] + + if not ret and cached then + paths = M.get_unloaded_rtp(modname) + ret = require("lazy.core.cache").find(modname, { + rtp = false, + paths = paths, + patterns = { "", ".lua" }, + })[1] + end if ret then local root = ret.modpath:gsub("/init%.lua$", ""):gsub("%.lua$", "") return root From a089d43dba7438532c56e1c582c5974713bd48f8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 21:57:34 +0200 Subject: [PATCH 562/815] feat: rewrite some known plugins to lazy specs instead of luarocks (plenary.nvim). Closes #1540 --- lua/lazy/pkg/init.lua | 3 ++- lua/lazy/pkg/rockspec.lua | 27 ++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index ee0daa4..a81ab9c 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -14,6 +14,7 @@ M.dirty = false ---@class LazyPkgSpec ---@field file string +---@field source? string ---@field spec? LazySpec ---@field code? string @@ -54,7 +55,7 @@ function M.update() local pkg = { name = plugin.name, dir = plugin.dir, - source = source.name, + source = spec.source or source.name, file = spec.file, spec = spec.spec or {}, } diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 72defae..0eba34c 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -7,6 +7,10 @@ local M = {} M.dev_suffix = "-1.rockspec" M.skip = { "lua" } +M.rewrites = { + ["plenary.nvim"] = { "nvim-lua/plenary.nvim", lazy = true }, +} + ---@param plugin LazyPlugin function M.deps(plugin) local root = Config.options.rocks.root .. "/" .. plugin.name @@ -32,6 +36,14 @@ end ---@param plugin LazyPlugin ---@return LazyPkgSpec? function M.get(plugin) + if M.rewrites[plugin.name] then + return { + file = "rewrite", + source = "lazy", + spec = M.rewrites[plugin.name], + } + end + local rockspec_file ---@type string? Util.ls(plugin.dir, function(path, name, t) if t == "file" and name:sub(-#M.dev_suffix) == M.dev_suffix then @@ -59,9 +71,16 @@ function M.get(plugin) local has_lua = not not vim.uv.fs_stat(plugin.dir .. "/lua") + ---@type LazyPluginSpec + local rewrites = {} + ---@param dep string local rocks = vim.tbl_filter(function(dep) local name = dep:gsub("%s.*", "") + if M.rewrites[name] then + table.insert(rewrites, M.rewrites[name]) + return false + end return not vim.tbl_contains(M.skip, name) end, rockspec.dependencies or {}) @@ -75,6 +94,12 @@ function M.get(plugin) ) if not use then + if #rewrites > 0 then + return { + file = vim.fn.fnamemodify(rockspec_file, ":t"), + spec = rewrites, + } + end return end @@ -90,7 +115,7 @@ function M.get(plugin) build = "rockspec", lazy = lazy, }, - } or nil + } end return M From 9bcbbc17a77680992fc9afcf3819f3b5c8f06bba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 21:59:16 +0200 Subject: [PATCH 563/815] chore(main): release 11.2.0 (#1541) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 8d8b6a5..af8cc29 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.1.0" + ".": "11.2.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index b2af7be..7df3b59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [11.2.0](https://github.com/folke/lazy.nvim/compare/v11.1.0...v11.2.0) (2024-06-24) + + +### Features + +* rewrite some known plugins to lazy specs instead of luarocks (plenary.nvim). Closes [#1540](https://github.com/folke/lazy.nvim/issues/1540) ([a089d43](https://github.com/folke/lazy.nvim/commit/a089d43dba7438532c56e1c582c5974713bd48f8)) + + +### Performance Improvements + +* minimize meta rebuild when loading specs ([1446f6c](https://github.com/folke/lazy.nvim/commit/1446f6cfbb4ca0a7ee0baf3acc86ab5e4be5ab22)) + ## [11.1.0](https://github.com/folke/lazy.nvim/compare/v11.0.1...v11.1.0) (2024-06-24) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4d1aa2b..3312d16 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -195,7 +195,7 @@ M.defaults = { debug = false, } -M.version = "11.1.0" -- x-release-please-version +M.version = "11.2.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 62a47b921fbffb3c1c8088a731029ae234f98851 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 24 Jun 2024 23:42:51 +0200 Subject: [PATCH 564/815] fix(loader): no need to check plugin.dir in auto_load --- lua/lazy/core/loader.lua | 2 +- lua/lazy/pkg/init.lua | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 7209362..597933b 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -525,7 +525,7 @@ end function M.auto_load(modname, modpath) local plugin = Plugin.find(modpath, { fast = not M.did_handlers }) - if plugin and modpath:find(plugin.dir, 1, true) == 1 then + if plugin then plugin._.rtp_loaded = true -- don't load if: -- * handlers haven't been setup yet diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index a81ab9c..b9620ca 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -1,5 +1,5 @@ local Config = require("lazy.core.config") -local Util = require("lazy.util") +local Util = require("lazy.core.util") local M = {} M.VERSION = 10 @@ -71,9 +71,10 @@ function M.update() table.sort(ret.pkgs, function(a, b) return a.name < b.name end) - local code = "return " .. Util.dump(ret) + local U = require("lazy.util") + local code = "return " .. U.dump(ret) vim.fn.mkdir(vim.fn.fnamemodify(Config.options.pkg.cache, ":h"), "p") - Util.write_file(Config.options.pkg.cache, code) + U.write_file(Config.options.pkg.cache, code) M.dirty = false M.cache = nil end From 378bfb465673a747e9e9f966e518063499e20cfe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 23:44:20 +0200 Subject: [PATCH 565/815] chore(main): release 11.2.1 (#1542) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index af8cc29..60f4637 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.2.0" + ".": "11.2.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 7df3b59..c19d070 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.2.1](https://github.com/folke/lazy.nvim/compare/v11.2.0...v11.2.1) (2024-06-24) + + +### Bug Fixes + +* **loader:** no need to check plugin.dir in auto_load ([62a47b9](https://github.com/folke/lazy.nvim/commit/62a47b921fbffb3c1c8088a731029ae234f98851)) + ## [11.2.0](https://github.com/folke/lazy.nvim/compare/v11.1.0...v11.2.0) (2024-06-24) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 3312d16..df520c8 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -195,7 +195,7 @@ M.defaults = { debug = false, } -M.version = "11.2.0" -- x-release-please-version +M.version = "11.2.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From dea1f687fe6e15eb3098557a69d44231ebcb6cf5 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 00:31:32 +0200 Subject: [PATCH 566/815] fix(fragments): check for empty plugin names --- lua/lazy/core/fragments.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/fragments.lua b/lua/lazy/core/fragments.lua index e0e6723..89b83f5 100644 --- a/lua/lazy/core/fragments.lua +++ b/lua/lazy/core/fragments.lua @@ -124,7 +124,7 @@ function M:add(plugin) fragment.name = fragment.name or fragment.url and self.spec.get_name(fragment.url) or fragment.dir and self.spec.get_name(fragment.dir) - if not fragment.name then + if not fragment.name or fragment.name == "" then return self.spec:error("Invalid plugin spec " .. vim.inspect(plugin)) end From d87da7667939deff2ed8b5a3c198d9ea2e03fee4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 07:55:30 +0200 Subject: [PATCH 567/815] feat(rocks): use hererocks to install luarocks when luarocks is not found --- lua/lazy/core/config.lua | 2 ++ lua/lazy/core/meta.lua | 8 ++++++++ lua/lazy/core/plugin.lua | 4 +++- lua/lazy/manage/task/plugin.lua | 20 +++++++++++++++++++- lua/lazy/pkg/init.lua | 26 ++++++++++++++++++++++++++ 5 files changed, 58 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index df520c8..a119737 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -49,6 +49,8 @@ M.defaults = { enabled = true, root = vim.fn.stdpath("data") .. "/lazy-rocks", server = "https://nvim-neorocks.github.io/rocks-binaries/", + -- use hererocks to install luarocks. + hererocks = vim.fn.executable("luarocks") == 0, }, dev = { ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 4645f1b..6978d96 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -33,7 +33,9 @@ function M:load_pkgs() if not Config.options.pkg.enabled then return end + local have_rockspec = false for _, pkg in ipairs(Pkg.get()) do + have_rockspec = have_rockspec or pkg.source == "rockspec" local meta, fragment = self:add(pkg.spec) if meta and fragment then meta._.pkg = pkg @@ -46,6 +48,12 @@ function M:load_pkgs() self.pkgs[pkg.dir] = fragment.id end end + if have_rockspec then + local hererocks = Pkg.hererocks() + if hererocks then + self:add(hererocks) + end + end end --- Remove a plugin and all its fragments. diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 062d5d2..cfc7b62 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -264,8 +264,10 @@ function M.update_rocks_state() end) for _, plugin in pairs(Config.plugins) do - if plugin._.pkg and plugin._.pkg.source == "rockspec" and plugin.build == "rockspec" then + if plugin.build == "rockspec" then plugin._.build = not installed[plugin.name] + elseif plugin.name == "hererocks" then + plugin._.build = not vim.uv.fs_stat(Config.options.rocks.root .. "/hererocks") end end end diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index cd01a25..6803722 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -18,8 +18,25 @@ local B = {} ---@param task LazyTask function B.rockspec(task) + ---@type table + local env = {} + + if Config.options.rocks.hererocks then + local hererocks = Config.options.rocks.root .. "/hererocks" + local sep = jit.os:find("Windows") and ";" or ":" + local path = vim.split(vim.env.PATH, sep) + table.insert(path, 1, hererocks .. "/bin") + env = { + PATH = table.concat(path, sep), + } + local plugin = Config.plugins.hererocks + -- hererocks is still building, so skip for now + if plugin and plugin._.build then + return + end + end + local root = Config.options.rocks.root .. "/" .. task.plugin.name - vim.fn.mkdir(root, "p") task:spawn("luarocks", { args = { "--tree", @@ -33,6 +50,7 @@ function B.rockspec(task) "--force-fast", }, cwd = task.plugin.dir, + env = env, }) end diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index b9620ca..3a7dd4c 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -112,6 +112,32 @@ local function _load() Util.track() end +---@return LazyPluginSpec?, string? +function M.hererocks() + if not (Config.options.rocks.enabled and Config.options.rocks.hererocks) then + return + end + + local root = Config.options.rocks.root .. "/hererocks" + + local cmd = { + "python", + "hererocks.py", + "--verbose", + "-l", + "5.1", + "-r", + "latest", + root, + } + + return { + "luarocks/hererocks", + lazy = true, + build = table.concat(cmd, " "), + }, root +end + ---@param dir string ---@return LazyPkg? ---@overload fun():LazyPkg[] From 0a5839ceeaec6d550f0e8d425d4a478daac176ce Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 25 Jun 2024 05:58:24 +0000 Subject: [PATCH 568/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index e88747b..64dac25 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -624,17 +624,19 @@ will be added to the plugin’s spec. pkg = { enabled = true, cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources -- the first package source that is found for a plugin will be used. sources = { "lazy", - "rockspec", + "rockspec", -- will only be used when rocks.enabled is true "packspec", }, }, rocks = { + enabled = true, root = vim.fn.stdpath("data") .. "/lazy-rocks", server = "https://nvim-neorocks.github.io/rocks-binaries/", + -- use hererocks to install luarocks. + hererocks = vim.fn.executable("luarocks") == 0, }, dev = { ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects From 45cd8d3f0fab197e6e0391cffa38879bdda4c2cd Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 06:40:50 +0200 Subject: [PATCH 569/815] fix(rocks): hererocks paths on windows --- lua/lazy/manage/task/plugin.lua | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index 6803722..cfdf8e0 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -21,14 +21,22 @@ function B.rockspec(task) ---@type table local env = {} + local luarocks = "luarocks" if Config.options.rocks.hererocks then - local hererocks = Config.options.rocks.root .. "/hererocks" - local sep = jit.os:find("Windows") and ";" or ":" + local is_win = jit.os:find("Windows") + local sep = is_win and ";" or ":" + local hererocks = Config.options.rocks.root .. "/hererocks/bin" + if is_win then + hererocks = hererocks:gsub("/", "\\") + end local path = vim.split(vim.env.PATH, sep) - table.insert(path, 1, hererocks .. "/bin") + table.insert(path, 1, hererocks) env = { PATH = table.concat(path, sep), } + if is_win then + luarocks = luarocks .. ".bat" + end local plugin = Config.plugins.hererocks -- hererocks is still building, so skip for now if plugin and plugin._.build then @@ -37,7 +45,7 @@ function B.rockspec(task) end local root = Config.options.rocks.root .. "/" .. task.plugin.name - task:spawn("luarocks", { + task:spawn(luarocks, { args = { "--tree", root, From 9005e8ede7ff9e6434818c32d99860d7154d0432 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 25 Jun 2024 06:48:06 +0000 Subject: [PATCH 570/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 64dac25..e88747b 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -624,19 +624,17 @@ will be added to the plugin’s spec. pkg = { enabled = true, cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources -- the first package source that is found for a plugin will be used. sources = { "lazy", - "rockspec", -- will only be used when rocks.enabled is true + "rockspec", "packspec", }, }, rocks = { - enabled = true, root = vim.fn.stdpath("data") .. "/lazy-rocks", server = "https://nvim-neorocks.github.io/rocks-binaries/", - -- use hererocks to install luarocks. - hererocks = vim.fn.executable("luarocks") == 0, }, dev = { ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects From 7d3f69104fb39d3e6e12f808204b3a7b38f86916 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 13:23:25 +0200 Subject: [PATCH 571/815] fix(rocks): better errors / warnings when something goes wrong with luarocks --- lua/lazy/core/loader.lua | 4 +- lua/lazy/core/meta.lua | 8 -- lua/lazy/core/plugin.lua | 14 ++ lua/lazy/core/util.lua | 1 + lua/lazy/health.lua | 79 ++++++++++-- lua/lazy/manage/task/init.lua | 25 ++++ lua/lazy/manage/task/plugin.lua | 49 +------ lua/lazy/pkg/init.lua | 26 ---- lua/lazy/pkg/rockspec.lua | 218 +++++++++++++++++++++++++++----- lua/lazy/view/colors.lua | 15 ++- lua/lazy/view/render.lua | 38 +++++- 11 files changed, 336 insertions(+), 141 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 597933b..c5cdca2 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -464,10 +464,8 @@ function M.add_to_rtp(plugin) local rtp = vim.api.nvim_get_runtime_file("", true) local idx_dir, idx_after - local is_win = jit.os:find("Windows") - for i, path in ipairs(rtp) do - if is_win then + if Util.is_win then path = Util.norm(path) end if path == Config.me then diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 6978d96..4645f1b 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -33,9 +33,7 @@ function M:load_pkgs() if not Config.options.pkg.enabled then return end - local have_rockspec = false for _, pkg in ipairs(Pkg.get()) do - have_rockspec = have_rockspec or pkg.source == "rockspec" local meta, fragment = self:add(pkg.spec) if meta and fragment then meta._.pkg = pkg @@ -48,12 +46,6 @@ function M:load_pkgs() self.pkgs[pkg.dir] = fragment.id end end - if have_rockspec then - local hererocks = Pkg.hererocks() - if hererocks then - self:add(hererocks) - end - end end --- Remove a plugin and all its fragments. diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index cfc7b62..8c746a9 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -335,6 +335,20 @@ function M.load() lazy._.loaded = {} end + -- add hererocks when enabled and needed + if Config.options.rocks.hererocks then + for _, plugin in pairs(Config.spec.plugins) do + if plugin.build == "rockspec" then + Config.spec.meta:add({ + "luarocks/hererocks", + build = "rockspec", + lazy = true, + }) + break + end + end + end + local existing = Config.plugins Config.plugins = Config.spec.plugins -- copy state. This wont do anything during startup diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 9a65a85..f42cf6a 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -5,6 +5,7 @@ local M = {} ---@type LazyProfile[] M._profiles = { { name = "lazy" } } +M.is_win = jit.os:find("Windows") ---@param data (string|{[string]:string})? ---@param time number? diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index c0a8981..3199f75 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -8,23 +8,62 @@ local start = vim.health.start or vim.health.report_start local ok = vim.health.ok or vim.health.report_ok local warn = vim.health.warn or vim.health.report_warn local error = vim.health.error or vim.health.report_error +local info = vim.health.info or vim.health.report_info + +---@class LazyHealth +---@field error? fun(msg:string) +---@field warn? fun(msg:string) +---@field ok? fun(msg:string) + +---@class LazyHealthHave : LazyHealth +---@field version? string +---@field version_pattern? string +---@field optional? boolean + +---@param cmd string|string[] +---@param opts? LazyHealthHave +function M.have(cmd, opts) + opts = vim.tbl_extend("force", { + error = error, + warn = warn, + ok = ok, + version = "--version", + }, opts or {}) + + cmd = type(cmd) == "table" and cmd or { cmd } + ---@cast cmd string[] + ---@type string? + local found + for _, c in ipairs(cmd) do + if vim.fn.executable(c) == 1 then + local version = vim.fn.system(c .. " " .. opts.version) or "" + version = vim.trim(vim.split(version, "\n")[1]) + version = version:gsub("^%s*" .. vim.pesc(c) .. "%s*", "") + if opts.version_pattern and not version:find(opts.version_pattern, 1, true) then + opts.warn(("`%s` version `%s` needed, but found `%s`"):format(c, opts.version_pattern, version)) + else + found = ("{%s} `%s`"):format(c, version) + break + end + end + end + if found then + opts.ok(found) + return true + else + (opts.optional and opts.warn or opts.error)( + ("{%s} %snot installed"):format( + table.concat(cmd, "} or {"), + opts.version_pattern and "version `" .. opts.version_pattern .. "` " or "" + ) + ) + end +end function M.check() start("lazy.nvim") - if vim.fn.executable("git") == 1 then - ok("'git' installed") - else - error("'git' not installed?") - end - - if Config.options.rocks.enabled then - if vim.fn.executable("luarocks") == 1 then - ok("'luarocks' installed") - else - error("'luarocks' not installed. Either install it or set opts.rocks.enabled = false") - end - end + M.have("git") local sites = vim.opt.packpath:get() local default_site = vim.fn.stdpath("data") .. "/site" @@ -45,7 +84,7 @@ function M.check() ok("no existing packages found by other package managers") end - for _, name in ipairs({ "packer", "plugged", "paq" }) do + for _, name in ipairs({ "packer", "plugged", "paq", "pckr", "mini.deps" }) do for _, path in ipairs(vim.opt.rtp:get()) do if path:find(name, 1, true) then error("Found paths on the rtp from another plugin manager `" .. name .. "`") @@ -82,6 +121,18 @@ function M.check() end end end + + start("luarocks") + if Config.options.rocks.enabled then + if Config.options.rocks.hererocks then + info("checking `hererocks` installation") + else + info("checking `luarocks` installation") + end + require("lazy.pkg.rockspec").check({ error = error, warn = warn, ok = ok }) + else + ok("luarocks disabled") + end end ---@param plugin LazyPlugin diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index d86ef5f..df8e792 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -12,6 +12,7 @@ local Process = require("lazy.manage.process") ---@field output string ---@field status string ---@field error? string +---@field warn? string ---@field private _task fun(task:LazyTask) ---@field private _running LazyPluginState[] ---@field private _started? number @@ -74,6 +75,30 @@ function Task:start() self:_check() end +---@param msg string|string[] +---@param severity? vim.diagnostic.Severity +function Task:notify(msg, severity) + local var = severity == vim.diagnostic.severity.ERROR and "error" + or severity == vim.diagnostic.severity.WARN and "warn" + or "output" + msg = type(msg) == "table" and table.concat(msg, "\n") or msg + ---@cast msg string + ---@diagnostic disable-next-line: no-unknown + self[var] = self[var] and (self[var] .. "\n" .. msg) or msg + self.status = msg + vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) +end + +---@param msg string|string[] +function Task:notify_error(msg) + self:notify(msg, vim.diagnostic.severity.ERROR) +end + +---@param msg string|string[] +function Task:notify_warn(msg) + self:notify(msg, vim.diagnostic.severity.WARN) +end + ---@param fn async fun() function Task:async(fn) local co = coroutine.create(fn) diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index cfdf8e0..cb426ec 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -1,5 +1,6 @@ local Config = require("lazy.core.config") local Loader = require("lazy.core.loader") +local Rocks = require("lazy.pkg.rockspec") local Util = require("lazy.util") ---@type table @@ -16,52 +17,6 @@ end local B = {} ----@param task LazyTask -function B.rockspec(task) - ---@type table - local env = {} - - local luarocks = "luarocks" - if Config.options.rocks.hererocks then - local is_win = jit.os:find("Windows") - local sep = is_win and ";" or ":" - local hererocks = Config.options.rocks.root .. "/hererocks/bin" - if is_win then - hererocks = hererocks:gsub("/", "\\") - end - local path = vim.split(vim.env.PATH, sep) - table.insert(path, 1, hererocks) - env = { - PATH = table.concat(path, sep), - } - if is_win then - luarocks = luarocks .. ".bat" - end - local plugin = Config.plugins.hererocks - -- hererocks is still building, so skip for now - if plugin and plugin._.build then - return - end - end - - local root = Config.options.rocks.root .. "/" .. task.plugin.name - task:spawn(luarocks, { - args = { - "--tree", - root, - "--server", - Config.options.rocks.server, - "--dev", - "--lua-version", - "5.1", - "make", - "--force-fast", - }, - cwd = task.plugin.dir, - env = env, - }) -end - ---@param task LazyTask ---@param build string function B.cmd(task, build) @@ -114,7 +69,7 @@ M.build = { build(self.plugin) end) elseif build == "rockspec" then - B.rockspec(self) + Rocks.build(self) elseif build:sub(1, 1) == ":" then B.cmd(self, build) elseif build:match("%.lua$") then diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index 3a7dd4c..b9620ca 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -112,32 +112,6 @@ local function _load() Util.track() end ----@return LazyPluginSpec?, string? -function M.hererocks() - if not (Config.options.rocks.enabled and Config.options.rocks.hererocks) then - return - end - - local root = Config.options.rocks.root .. "/hererocks" - - local cmd = { - "python", - "hererocks.py", - "--verbose", - "-l", - "5.1", - "-r", - "latest", - root, - } - - return { - "luarocks/hererocks", - lazy = true, - build = table.concat(cmd, " "), - }, root -end - ---@param dir string ---@return LazyPkg? ---@overload fun():LazyPkg[] diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 0eba34c..abbd0ba 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -1,31 +1,8 @@ --# selene:allow(incorrect_standard_library_use) local Config = require("lazy.core.config") +local Health = require("lazy.health") local Util = require("lazy.util") -local M = {} - -M.dev_suffix = "-1.rockspec" -M.skip = { "lua" } - -M.rewrites = { - ["plenary.nvim"] = { "nvim-lua/plenary.nvim", lazy = true }, -} - ----@param plugin LazyPlugin -function M.deps(plugin) - local root = Config.options.rocks.root .. "/" .. plugin.name - local manifest_file = root .. "/lib/luarocks/rocks-5.1/manifest" - local manifest = {} - pcall(function() - local load, err = loadfile(manifest_file, "t", manifest) - if not load then - error(err) - end - load() - end) - return vim.tbl_keys(manifest.repository or {}) -end - ---@class RockSpec ---@field rockspec_format string ---@field package string @@ -33,6 +10,190 @@ end ---@field dependencies string[] ---@field build? {build_type?: string, modules?: any[]} +---@class RockManifest +---@field repository table + +local M = {} + +M.dev_suffix = "-1.rockspec" +M.skip = { "lua" } +M.rewrites = { + ["plenary.nvim"] = { "nvim-lua/plenary.nvim", lazy = true }, +} +M.python = { "python3", "python" } + +---@class HereRocks +M.hererocks = {} + +---@param task LazyTask +function M.hererocks.build(task) + local root = Config.options.rocks.root .. "/hererocks" + + ---@param p string + local python = vim.tbl_filter(function(p) + return vim.fn.executable(p) == 1 + end, M.python)[1] + + task:spawn(python, { + args = { + "hererocks.py", + "--verbose", + "-l", + "5.1", + "-r", + "latest", + root, + }, + cwd = task.plugin.dir, + }) +end + +---@param bin string +function M.hererocks.bin(bin) + local hererocks = Config.options.rocks.root .. "/hererocks/bin" + if Util.is_win then + bin = bin .. ".bat" + end + return Util.norm(hererocks .. "/" .. bin) +end + +-- check if hererocks is building +---@return boolean? +function M.hererocks.building() + return vim.tbl_get(Config.plugins.hererocks or {}, "_", "build") +end + +---@param opts? LazyHealth +function M.check(opts) + opts = vim.tbl_extend("force", { + error = Util.error, + warn = Util.warn, + ok = function() end, + }, opts or {}) + + local ok = false + if Config.options.rocks.hererocks then + if M.hererocks.building() then + ok = true + else + ok = Health.have(M.python, opts) + ok = Health.have(M.hererocks.bin("luarocks")) and ok + ok = Health.have( + M.hererocks.bin("lua"), + vim.tbl_extend("force", opts, { + version = "-v", + version_pattern = "5.1", + }) + ) and ok + end + else + ok = Health.have("luarocks", opts) + ok = ( + Health.have( + { "lua5.1", "lua" }, + vim.tbl_extend("force", opts, { + version = "-v", + version_pattern = "5.1", + }) + ) + ) and ok + end + return ok +end + +---@param task LazyTask +function M.build(task) + if + not M.check({ + error = function(msg) + task:notify_error(msg:gsub("[{}]", "`")) + end, + warn = function(msg) + task:notify_warn(msg) + end, + ok = function(msg) end, + }) + then + task:notify_warn({ + "", + "This plugin requires `luarocks`. Try one of the following:", + " - fix your `luarocks` installation", + Config.options.rocks.hererocks and " - disable *hererocks* with `opts.rocks.hererocks = false`" + or " - enable `hererocks` with `opts.rocks.hererocks = true`", + " - disable `luarocks` support completely with `opts.rocks.enabled = false`", + }) + return + end + + if task.plugin.name == "hererocks" then + return M.hererocks.build(task) + end + + local env = {} + local luarocks = "luarocks" + if Config.options.rocks.hererocks then + -- hererocks is still building, so skip for now + -- a new build will happen in the next round + if M.hererocks.building() then + return + end + + local sep = Util.is_win and ";" or ":" + local hererocks = Config.options.rocks.root .. "/hererocks/bin" + if Util.is_win then + hererocks = hererocks:gsub("/", "\\") + end + local path = vim.split(vim.env.PATH, sep) + table.insert(path, 1, hererocks) + env = { + PATH = table.concat(path, sep), + } + if Util.is_win then + luarocks = luarocks .. ".bat" + end + end + + local root = Config.options.rocks.root .. "/" .. task.plugin.name + task:spawn(luarocks, { + args = { + "--tree", + root, + "--server", + Config.options.rocks.server, + "--dev", + "--lua-version", + "5.1", + "make", + "--force-fast", + }, + cwd = task.plugin.dir, + env = env, + }) +end + +---@param file string +---@return table? +function M.parse(file) + local ret = {} + return pcall(function() + loadfile(file, "t", ret)() + end) and ret or nil +end + +---@param plugin LazyPlugin +function M.deps(plugin) + local root = Config.options.rocks.root .. "/" .. plugin.name + ---@type RockManifest? + local manifest = M.parse(root .. "/lib/luarocks/rocks-5.1/manifest") + return manifest and vim.tbl_keys(manifest.repository or {}) +end + +---@param file string +---@return RockSpec? +function M.rockspec(file) + return M.parse(file) +end + ---@param plugin LazyPlugin ---@return LazyPkgSpec? function M.get(plugin) @@ -56,14 +217,7 @@ function M.get(plugin) return end - ---@type RockSpec? - ---@diagnostic disable-next-line: missing-fields - local rockspec = {} - local load, err = loadfile(rockspec_file, "t", rockspec) - if not load then - error(err) - end - load() + local rockspec = M.rockspec(rockspec_file) if not rockspec then return diff --git a/lua/lazy/view/colors.lua b/lua/lazy/view/colors.lua index 83269f9..e55c56b 100644 --- a/lua/lazy/view/colors.lua +++ b/lua/lazy/view/colors.lua @@ -31,18 +31,20 @@ M.colors = { ButtonActive = "Visual", TaskOutput = "MsgArea", -- task output TaskError = "ErrorMsg", -- task errors + TaskWarning = "WarningMsg", -- task errors Dir = "@markup.link", -- directory Url = "@markup.link", -- url + Bold = { bold = true }, + Italic = { italic = true }, } M.did_setup = false function M.set_hl() for hl_group, link in pairs(M.colors) do - vim.api.nvim_set_hl(0, "Lazy" .. hl_group, { - link = link, - default = true, - }) + local hl = type(link) == "table" and link or { link = link } + hl.default = true + vim.api.nvim_set_hl(0, "Lazy" .. hl_group, hl) end end @@ -54,6 +56,11 @@ function M.setup() M.did_setup = true M.set_hl() + vim.api.nvim_create_autocmd("VimEnter", { + callback = function() + M.set_hl() + end, + }) vim.api.nvim_create_autocmd("ColorScheme", { callback = function() M.set_hl() diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 7d91dd8..61faca1 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -394,6 +394,11 @@ function M:diagnostics(plugin) message = task.name .. " failed", severity = vim.diagnostic.severity.ERROR, }) + elseif task.warn then + self:diagnostic({ + message = task.name .. " warning", + severity = vim.diagnostic.severity.WARN, + }) end end end @@ -434,6 +439,22 @@ function M:plugin(plugin) { name = plugin.name, from = plugin_start, to = self:row() - 1, kind = plugin._.kind } end +---@param str string +---@param hl? string|Extmark +---@param opts? {indent?: number, prefix?: string, wrap?: boolean} +function M:markdown(str, hl, opts) + local lines = vim.split(str, "\n") + for _, line in ipairs(lines) do + self:append(line, hl, opts):highlight({ + ["`.-`"] = "@markup.raw.markdown_inline", + ["%*.-%*"] = "LazyItalic", + ["%*%*.-%*%*"] = "LazyBold", + ["^%s*-"] = "Special", + }) + self:nl() + end +end + ---@param plugin LazyPlugin function M:tasks(plugin) for _, task in ipairs(plugin._.tasks or {}) do @@ -443,13 +464,16 @@ function M:tasks(plugin) self:nl() end if task.error then - self:append(vim.trim(task.error), "LazyTaskError", { indent = 6 }) - self:nl() - elseif task.name == "log" then + self:markdown(task.error, "LazyTaskError", { indent = 6 }) + end + if task.warn then + self:markdown(task.warn, "LazyTaskWarning", { indent = 6 }) + end + if not task.error and not task.warn and task.name == "log" then self:log(task) - elseif self.view:is_selected(plugin) and task.output ~= "" and task.output ~= task.error then - self:append(vim.trim(task.output), "LazyTaskOutput", { indent = 6 }) - self:nl() + end + if self.view:is_selected(plugin) or (task.error or task.warn) then + self:markdown(vim.trim(task.output), "LazyTaskOutput", { indent = 6 }) end end end @@ -512,7 +536,7 @@ function M:details(plugin) end end local rocks = require("lazy.pkg.rockspec").deps(plugin) - if not vim.tbl_isempty(rocks) then + if rocks then table.insert(props, { "rocks", vim.inspect(rocks) }) end From 4ca3e9aa51c03dda73b40ec9901deac5d4f11c69 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 15:44:13 +0200 Subject: [PATCH 572/815] fix(rocks): windows --- lua/lazy/pkg/rockspec.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index abbd0ba..325f22a 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -51,9 +51,6 @@ end ---@param bin string function M.hererocks.bin(bin) local hererocks = Config.options.rocks.root .. "/hererocks/bin" - if Util.is_win then - bin = bin .. ".bat" - end return Util.norm(hererocks .. "/" .. bin) end From 24c832213c505a0d7ca021c0e14bba43e0fef75c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 15:51:40 +0200 Subject: [PATCH 573/815] fix(meta): no need to check for old_dir when frags were not built yet. Fixes #1550 --- lua/lazy/core/meta.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 4645f1b..ec3a5b4 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -89,7 +89,7 @@ function M:add(plugin) table.insert(meta._.frags, fragment.id) - if meta._ and meta._.rtp_loaded then + if meta._ and meta._.rtp_loaded and meta.dir then local old_dir = meta.dir self:_rebuild(meta.name) local new_dir = meta.dir From 2ca68f9979dca1a9911b0f7397550a06854ebb27 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 16:21:15 +0200 Subject: [PATCH 574/815] chore(main): release 11.3.0 (#1543) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 16 ++++++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 60f4637..6d2ee11 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.2.1" + ".": "11.3.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index c19d070..028f5ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## [11.3.0](https://github.com/folke/lazy.nvim/compare/v11.2.1...v11.3.0) (2024-06-25) + + +### Features + +* **rocks:** use hererocks to install luarocks when luarocks is not found ([d87da76](https://github.com/folke/lazy.nvim/commit/d87da7667939deff2ed8b5a3c198d9ea2e03fee4)) + + +### Bug Fixes + +* **fragments:** check for empty plugin names ([dea1f68](https://github.com/folke/lazy.nvim/commit/dea1f687fe6e15eb3098557a69d44231ebcb6cf5)) +* **meta:** no need to check for old_dir when frags were not built yet. Fixes [#1550](https://github.com/folke/lazy.nvim/issues/1550) ([24c8322](https://github.com/folke/lazy.nvim/commit/24c832213c505a0d7ca021c0e14bba43e0fef75c)) +* **rocks:** better errors / warnings when something goes wrong with luarocks ([7d3f691](https://github.com/folke/lazy.nvim/commit/7d3f69104fb39d3e6e12f808204b3a7b38f86916)) +* **rocks:** hererocks paths on windows ([45cd8d3](https://github.com/folke/lazy.nvim/commit/45cd8d3f0fab197e6e0391cffa38879bdda4c2cd)) +* **rocks:** windows ([4ca3e9a](https://github.com/folke/lazy.nvim/commit/4ca3e9aa51c03dda73b40ec9901deac5d4f11c69)) + ## [11.2.1](https://github.com/folke/lazy.nvim/compare/v11.2.0...v11.2.1) (2024-06-24) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index a119737..6e23b21 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -197,7 +197,7 @@ M.defaults = { debug = false, } -M.version = "11.2.1" -- x-release-please-version +M.version = "11.3.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From b6eba0d02600b678959f90876bc678178b4dd4f6 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 17:41:14 +0200 Subject: [PATCH 575/815] ci: auto-get rockspec mappings for rock name => github short url or url --- .github/workflows/ci.yml | 30 + .gitignore | 1 + lua/lazy/build.lua | 90 + lua/lazy/community/rocks.lua | 873 + lua/lazy/manage/semver.lua | 2 + lua/lazy/pkg/rockspec.lua | 3 +- manifest | 116407 ++++++++++++++++++++++++++++++++ 7 files changed, 117405 insertions(+), 1 deletion(-) create mode 100644 lua/lazy/build.lua create mode 100644 lua/lazy/community/rocks.lua create mode 100644 manifest diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 05b9111..e7c3dd2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,36 @@ jobs: nvim --version [ ! -d tests ] && exit 0 nvim --headless -u tests/init.lua -c "PlenaryBustedDirectory tests/ {minimal_init = 'tests/init.lua', sequential = true}" + community: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install Neovim + shell: bash + run: | + mkdir -p /tmp/nvim + wget -q https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage -O /tmp/nvim/nvim.appimage + cd /tmp/nvim + chmod a+x ./nvim.appimage + ./nvim.appimage --appimage-extract + echo "/tmp/nvim/squashfs-root/usr/bin/" >> $GITHUB_PATH + - name: Rockspec Build + id: rockspec-build + uses: actions/cache@v4 + with: + path: build + key: rockspec-build + - name: Generate Rockspec + if: steps.rockspec-build.cache-hit != 'true' + run: | + nvim -l lua/lazy/build.lua + - name: Push changes + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "chore(build): auto-generate rockspec mappings" + commit_user_name: "github-actions[bot]" + commit_user_email: "github-actions[bot]@users.noreply.github.com" + commit_author: "github-actions[bot] " release: name: release if: ${{ github.ref == 'refs/heads/main' }} diff --git a/.gitignore b/.gitignore index cc5457a..7217496 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ debug foo.* *.log data +build diff --git a/lua/lazy/build.lua b/lua/lazy/build.lua new file mode 100644 index 0000000..83993aa --- /dev/null +++ b/lua/lazy/build.lua @@ -0,0 +1,90 @@ +vim.opt.rtp:append(".") +local Rocks = require("lazy.pkg.rockspec") +local Semver = require("lazy.manage.semver") +local Util = require("lazy.util") + +local M = {} + +function M.fetch(url, file, prefix) + if not vim.uv.fs_stat(file) then + print((prefix or "") .. "Fetching " .. url .. " to " .. file .. "\n") + vim.cmd.redraw() + local out = vim.fn.system("wget " .. url .. " -O " .. file) + if vim.v.shell_error ~= 0 then + pcall(vim.uv.fs_unlink, file) + error("Failed to fetch " .. url .. ":\n" .. out) + end + end +end + +---@return RockManifest? +function M.fetch_manifest() + local manifest_file = "build/manifest.lua" + M.fetch("https://luarocks.org/manifest", manifest_file) + return Rocks.parse(manifest_file) +end + +function M.fetch_rockspec(name, version, prefix) + version = version or "scm-1" + local url = "https://luarocks.org/" .. name .. "-" .. version .. ".rockspec" + M.fetch(url, "build/" .. name .. ".rockspec", prefix) +end + +function M.build() + vim.fn.mkdir("build", "p") + local manifest = M.fetch_manifest() or {} + ---@type {name:string, version:string, url:string}[] + local nvim_rocks = {} + for rock, vv in pairs(manifest.repository or {}) do + if rock:find("nvim", 1, true) then + local versions = vim.tbl_map(Semver.version, vim.tbl_keys(vv)) + versions = vim.tbl_filter(function(v) + return not not v + end, versions) + local last = Semver.last(versions) or next(vv) + last = type(last) == "table" and last.input or last + table.insert(nvim_rocks, { name = rock, version = last }) + end + end + table.sort(nvim_rocks, function(a, b) + return a.name < b.name + end) + + for r, rock in ipairs(nvim_rocks) do + local progress = string.format("[%d/%d] ", r, #nvim_rocks) + local ok, err = pcall(M.fetch_rockspec, rock.name, rock.version, progress) + if not ok then + err = vim.trim("Error: " .. err) + local lines = vim.split(err, "\n") + lines = vim.tbl_map(function(line) + return " " .. line + end, lines) + print(table.concat(lines, "\n") .. "\n") + end + end + + for _, rock in ipairs(nvim_rocks) do + local rockspec = Rocks.rockspec("build/" .. rock.name .. ".rockspec") + if rockspec then + local url = rockspec.source and rockspec.source.url + -- parse github short url + if url and url:find("^%a+://github.com/") then + url = url:gsub("^%a+://github.com/", "") + local parts = vim.split(url, "/") + url = parts[1] .. "/" .. parts[2] + end + if url then + rock.url = url + print(rock.name .. " " .. url) + else + print("Error: " .. rock.name .. " missing source url\n\n") + print(vim.inspect(rockspec) .. "\n") + end + end + end + Util.write_file("lua/lazy/community/rocks.lua", "return \n" .. vim.inspect(nvim_rocks)) +end + +M.build() + +return M diff --git a/lua/lazy/community/rocks.lua b/lua/lazy/community/rocks.lua new file mode 100644 index 0000000..1b7a361 --- /dev/null +++ b/lua/lazy/community/rocks.lua @@ -0,0 +1,873 @@ +return { + { + name = "15puzzle.nvim", + url = "NStefan002/15puzzle.nvim", + version = "1.4.1-1", + }, + { + name = "aerial.nvim", + url = "stevearc/aerial.nvim", + version = "1.7.0-1", + }, + { + name = "ai.nvim", + url = "S1M0N38/ai.nvim", + version = "0.1.0-1", + }, + { + name = "auto-hlsearch.nvim", + url = "asiryk/auto-hlsearch.nvim", + version = "1.1.0-1", + }, + { + name = "better-escape.nvim", + url = "max397574/better-escape.nvim", + version = "1.0.0-1", + }, + { + name = "bufferline.nvim", + url = "akinsho/bufferline.nvim", + version = "4.6.1-1", + }, + { + name = "ccc.nvim", + url = "uga-rosa/ccc.nvim", + version = "1.6.0-1", + }, + { + name = "ci-template.nvim", + url = "linrongbin16/ci-template.nvim", + version = "8.1.0-1", + }, + { + name = "colorbox.nvim", + url = "linrongbin16/colorbox.nvim", + version = "3.1.0-1", + }, + { + name = "colorbuddy.nvim", + url = "tjdevries/colorbuddy.nvim", + version = "1.0.0-1", + }, + { + name = "colortils.nvim", + url = "nvim-colortils/colortils.nvim", + version = "1.1.0-1", + }, + { + name = "commander.nvim", + url = "FeiyouG/commander.nvim", + version = "0.2.0-1", + }, + { + name = "comment-box.nvim", + url = "LudoPinelli/comment-box.nvim", + version = "1.0.2-1", + }, + { + name = "comment.nvim", + url = "numToStr/Comment.nvim", + version = "0.8.0-1", + }, + { + name = "commons.nvim", + url = "linrongbin16/commons.nvim", + version = "18.0.0-1", + }, + { + name = "conform.nvim", + url = "stevearc/conform.nvim", + version = "6.0.0-1", + }, + { + name = "cybu.nvim", + url = "ghillb/cybu.nvim", + version = "1.0-1", + }, + { + name = "daylight.nvim", + url = "NTBBloodbath/daylight.nvim", + version = "1.1.0-1", + }, + { + name = "deadcolumn.nvim", + url = "Bekaboo/deadcolumn.nvim", + version = "1.0.0-1", + }, + { + name = "decipher.nvim", + url = "MisanthropicBit/decipher.nvim", + version = "1.0.1-1", + }, + { + name = "detour.nvim", + url = "carbon-steel/detour.nvim", + version = "1.4.0-1", + }, + { + name = "dial.nvim", + url = "monaqa/dial.nvim", + version = "0.4.0-1", + }, + { + name = "distant.nvim", + url = "chipsenkbeil/distant.nvim", + version = "0.1.2-1", + }, + { + name = "donut.nvim", + url = "NStefan002/donut.nvim", + version = "2.1.0-1", + }, + { + name = "dressing.nvim", + url = "stevearc/dressing.nvim", + version = "2.2.2-1", + }, + { + name = "dropbar.nvim", + url = "Bekaboo/dropbar.nvim", + version = "8.4.0-1", + }, + { + name = "duck.nvim", + url = "tamton-aquib/duck.nvim", + version = "main-1", + }, + { + name = "easypick.nvim", + url = "axkirillov/easypick.nvim", + version = "0.6.0-1", + }, + { + name = "edgy.nvim", + url = "folke/edgy.nvim", + version = "1.9.1-1", + }, + { + name = "elixir-tools.nvim", + url = "elixir-tools/elixir-tools.nvim", + version = "0.14.3-1", + }, + { + name = "feline.nvim", + url = "freddiehaddad/feline.nvim", + version = "1.6.2-1", + }, + { + name = "fidget.nvim", + url = "j-hui/fidget.nvim", + version = "1.4.1-1", + }, + { + name = "flash.nvim", + url = "folke/flash.nvim", + version = "1.18.3-1", + }, + { + name = "flatten.nvim", + url = "willothy/flatten.nvim", + version = "0.5.1-1", + }, + { + name = "flutter-tools.nvim", + url = "akinsho/flutter-tools.nvim", + version = "1.10.0-1", + }, + { + name = "focus.nvim", + url = "nvim-focus/focus.nvim", + version = "1.0.2-1", + }, + { + name = "freeze-code.nvim", + url = "AlejandroSuero/freeze-code.nvim", + version = "0.2.0-1", + }, + { + name = "fugit2.nvim", + url = "SuperBo/fugit2.nvim", + version = "0.2.0-1", + }, + { + name = "funnyfiles.nvim", + url = "aikooo7/funnyfiles.nvim", + version = "1.0.1-1", + }, + { + name = "fzfx.nvim", + url = "linrongbin16/fzfx.nvim", + version = "6.4.0-1", + }, + { + name = "galileo.nvim", + url = "S1M0N38/galileo.nvim", + version = "0.0.2-1", + }, + { + name = "gentags.nvim", + url = "linrongbin16/gentags.nvim", + version = "3.0.2-1", + }, + { + name = "git-worktree.nvim", + url = "polarmutex/git-worktree.nvim", + version = "1.0.0-1", + }, + { + name = "github-nvim-theme", + url = "projekt0n/github-nvim-theme", + version = "1.0.2-1", + }, + { + name = "gitlinker.nvim", + url = "linrongbin16/gitlinker.nvim", + version = "4.13.1-1", + }, + { + name = "gitsigns.nvim", + url = "lewis6991/gitsigns.nvim", + version = "scm-1", + }, + { + name = "glow.nvim", + url = "ellisonleao/glow.nvim", + version = "0.2.0-1", + }, + { + name = "go.nvim", + url = "ray-x/go.nvim", + version = "0.2.1-1", + }, + { + name = "godo.nvim", + url = "arthuradolfo/godo.nvim", + version = "1.1.0-0", + }, + { + name = "grapple.nvim", + url = "cbochs/grapple.nvim", + version = "0.30.0-1", + }, + { + name = "gruvbox.nvim", + url = "ellisonleao/gruvbox.nvim", + version = "2.0.0-1", + }, + { + name = "haskell-snippets.nvim", + url = "mrcjkb/haskell-snippets.nvim", + version = "1.4.4-1", + }, + { + name = "haskell-tools.nvim", + url = "mrcjkb/haskell-tools.nvim", + version = "3.1.10-1", + }, + { + name = "headlines.nvim", + url = "lukas-reineke/headlines.nvim", + version = "4.0.1-1", + }, + { + name = "heirline.nvim", + url = "rebelot/heirline.nvim", + version = "1.0.6-1", + }, + { + name = "hlchunk.nvim", + url = "shellRaining/hlchunk.nvim", + version = "1.1.0-1", + }, + { + name = "hotpot.nvim", + url = "rktjmp/hotpot.nvim", + version = "0.12.1-1", + }, + { + name = "hydra.nvim", + url = "nvimtools/hydra.nvim", + version = "1.0.2-1", + }, + { + name = "image.nvim", + url = "3rd/image.nvim", + version = "1.3.0-1", + }, + { + name = "incline.nvim", + url = "b0o/incline.nvim", + version = "0.0.1-1", + }, + { + name = "indent-blankline.nvim", + url = "lukas-reineke/indent-blankline.nvim", + version = "3.6.3-1", + }, + { + name = "kai.nvim", + url = "Kamilcuk/kai.nvim", + version = "0.0.6-1", + }, + { + name = "lazy.nvim", + url = "folke/lazy.nvim", + version = "11.2.1-1", + }, + { + name = "leetcode.nvim", + url = "kawre/leetcode.nvim", + version = "0.2.0-1", + }, + { + name = "legendary.nvim", + url = "mrjones2014/legendary.nvim", + version = "2.13.11-1", + }, + { + name = "live-command.nvim", + url = "smjonas/live-command.nvim", + version = "1.2.1-1", + }, + { + name = "logging.nvim", + url = "NTBBloodbath/logging.nvim", + version = "1.1.0-1", + }, + { + name = "love2d.nvim", + url = "S1M0N38/love2d.nvim", + version = "0.2-1", + }, + { + name = "lsp-progress.nvim", + url = "linrongbin16/lsp-progress.nvim", + version = "1.0.12-1", + }, + { + name = "lsp_signature.nvim", + url = "ray-x/lsp_signature.nvim", + version = "0.3.1-1", + }, + { + name = "lua-obfuscator.nvim", + url = "git+ssh://git@github.com/kdssoftware/lua-obfuscator.nvim.git", + version = "1.0.1-1", + }, + { + name = "lua-utils.nvim", + url = "nvim-neorg/lua-utils.nvim", + version = "1.0.2-1", + }, + { + name = "mapx.nvim", + url = "b0o/mapx.nvim", + version = "0.2.1-1", + }, + { + name = "mason-lspconfig.nvim", + url = "williamboman/mason-lspconfig.nvim", + version = "1.29.0-1", + }, + { + name = "mason-nvim-dap.nvim", + url = "jay-babu/mason-nvim-dap.nvim", + version = "2.3.0-1", + }, + { + name = "mason.nvim", + url = "williamboman/mason.nvim", + version = "1.10.0-1", + }, + { + name = "mini.nvim", + url = "echasnovski/mini.nvim", + version = "0.9.0-1", + }, + { + name = "mkdnflow.nvim", + url = "jakewvincent/mkdnflow.nvim", + version = "1.2.0-1", + }, + { + name = "move.nvim", + url = "fedepujol/move.nvim", + version = "2.0.0-1", + }, + { + name = "multicursors.nvim", + url = "smoka7/multicursors.nvim", + version = "1.0.0-1", + }, + { + name = "my-awesome-plugin.nvim", + url = "S1M0N38/my-awesome-plugin.nvim", + version = "0.1.1-1", + }, + { + name = "navigator.nvim", + url = "numToStr/Navigator.nvim", + version = "0.6-1", + }, + { + name = "neo-tree.nvim", + url = "nvim-neo-tree/neo-tree.nvim", + version = "3.26-1", + }, + { + name = "neoconf.nvim", + url = "folke/neoconf.nvim", + version = "1.2.2-1", + }, + { + name = "neodev.nvim", + url = "folke/neodev.nvim", + version = "3.0.0-1", + }, + { + name = "neoscroll.nvim", + url = "karb94/neoscroll.nvim", + version = "0.2.0-1", + }, + { + name = "nightfox.nvim", + url = "EdenEast/nightfox.nvim", + version = "3.9.3-1", + }, + { + name = "no-neck-pain.nvim", + url = "shortcuts/no-neck-pain.nvim", + version = "1.14.0-1", + }, + { + name = "noice.nvim", + url = "folke/noice.nvim", + version = "4.3.0-1", + }, + { + name = "npackages.nvim", + url = "diegofigs/npackages.nvim", + version = "0.1.0-1", + }, + { + name = "nui-components.nvim", + url = "grapp-dev/nui-components.nvim", + version = "1.5.2-1", + }, + { + name = "nui.nvim", + url = "git+https://github.com/MunifTanjim/nui.nvim.git", + version = "0.3.0-1", + }, + { + name = "nvim-client", + url = "neovim/lua-client", + version = "0.2.4-1", + }, + { + name = "nvim-client-proxy", + url = "hjdivad/nvim-client-proxy", + version = "0.1.0-1", + }, + { + name = "nvim-cmp", + url = "hrsh7th/nvim-cmp", + version = "0.0.1-2", + }, + { + name = "nvim-cokeline", + url = "willothy/nvim-cokeline", + version = "0.4.0-1", + }, + { + name = "nvim-dap", + url = "mfussenegger/nvim-dap", + version = "0.8.0-1", + }, + { + name = "nvim-dap-ui", + url = "rcarriga/nvim-dap-ui", + version = "4.0.0-1", + }, + { + name = "nvim-dbee", + url = "kndndrj/nvim-dbee", + version = "0.1.6-1", + }, + { + name = "nvim-dev-container", + url = "esensar/nvim-dev-container", + version = "0.2.0-1", + }, + { + name = "nvim-java", + url = "nvim-java/nvim-java", + version = "1.0.0-1", + }, + { + name = "nvim-java-core", + url = "nvim-java/nvim-java-core", + version = "1.0.0-1", + }, + { + name = "nvim-java-dap", + url = "nvim-java/nvim-java-dap", + version = "1.0.0-1", + }, + { + name = "nvim-jdtls", + url = "mfussenegger/nvim-jdtls", + version = "0.2.0-1", + }, + { + name = "nvim-jqx", + url = "gennaro-tedesco/nvim-jqx", + version = "0.1.4-1", + }, + { + name = "nvim-lastplace", + url = "mrcjkb/nvim-lastplace", + version = "1.0.0-1", + }, + { + name = "nvim-lightbulb", + url = "kosayoda/nvim-lightbulb", + version = "1.0.0-1", + }, + { + name = "nvim-lspconfig", + url = "neovim/nvim-lspconfig", + version = "0.1.8-1", + }, + { + name = "nvim-metals", + url = "scalameta/nvim-metals", + version = "0.9.x-1", + }, + { + name = "nvim-nio", + url = "nvim-neotest/nvim-nio", + version = "1.9.4-1", + }, + { + name = "nvim-notify", + url = "rcarriga/nvim-notify", + version = "3.13.5-1", + }, + { + name = "nvim-parinfer", + url = "gpanders/nvim-parinfer", + version = "1.2.0-1", + }, + { + name = "nvim-peekup", + url = "gennaro-tedesco/nvim-peekup", + version = "0.1.1-1", + }, + { + name = "nvim-possession", + url = "gennaro-tedesco/nvim-possession", + version = "0.0.13-1", + }, + { + name = "nvim-scrollview", + url = "dstein64/nvim-scrollview", + version = "5.1.0-1", + }, + { + name = "nvim-smuggler", + url = "Klafyvel/nvim-smuggler", + version = "main-1", + }, + { + name = "nvim-snippy", + url = "dcampos/nvim-snippy", + version = "1.0.0-1", + }, + { + name = "nvim-surround", + url = "kylechui/nvim-surround", + version = "2.1.5-1", + }, + { + name = "nvim-tree.lua", + url = "nvim-tree/nvim-tree.lua", + version = "1.4.0-1", + }, + { + name = "nvim-treesitter-legacy-api", + url = "nvim-treesitter/nvim-treesitter", + version = "0.9.2-1", + }, + { + name = "nvim-ufo", + url = "kevinhwang91/nvim-ufo", + version = "1.4.0-1", + }, + { + name = "nvim-web-devicons", + url = "nvim-tree/nvim-web-devicons", + version = "0.100-1", + }, + { + name = "obsidian.nvim", + url = "epwalsh/obsidian.nvim", + version = "3.8.0-1", + }, + { + name = "oil.nvim", + url = "stevearc/oil.nvim", + version = "2.10.0-1", + }, + { + name = "onedarkpro.nvim", + url = "olimorris/onedarkpro.nvim", + version = "0.8.0-1", + }, + { + name = "onenord.nvim", + url = "rmehri01/onenord.nvim", + version = "0.7.0-1", + }, + { + name = "otter.nvim", + url = "jmbuhr/otter.nvim", + version = "1.15.1-1", + }, + { + name = "overseer.nvim", + url = "stevearc/overseer.nvim", + version = "1.4.0-1", + }, + { + name = "oz.nvim", + url = "luxluth/oz.nvim", + version = "0.0.3-1", + }, + { + name = "package-info.nvim", + url = "vuki656/package-info.nvim", + version = "2.0-1", + }, + { + name = "paperplanes.nvim", + url = "rktjmp/paperplanes.nvim", + version = "0.1.6-1", + }, + { + name = "papis.nvim", + url = "jghauser/papis.nvim", + version = "0.5.1-1", + }, + { + name = "paq-nvim", + url = "savq/paq-nvim", + version = "2.0.0-1", + }, + { + name = "pathlib.nvim", + url = "pysan3/pathlib.nvim", + version = "2.2.2-1", + }, + { + name = "persistence.nvim", + url = "folke/persistence.nvim", + version = "2.0.0-1", + }, + { + name = "plenary.nvim", + url = "nvim-lua/plenary.nvim", + version = "0.1.4-1", + }, + { + name = "pretty-fold.nvim", + url = "anuvyklack/pretty-fold.nvim", + version = "3.0-1", + }, + { + name = "rainbow-delimiters.nvim", + url = "HiPhish/rainbow-delimiters.nvim", + version = "0.4.0-1", + }, + { + name = "renamer.nvim", + url = "filipdutescu/renamer.nvim", + version = "5.1.0-1", + }, + { + name = "rest.nvim", + url = "rest-nvim/rest.nvim", + version = "2.0.1-1", + }, + { + name = "rocks-config.nvim", + url = "nvim-neorocks/rocks-config.nvim", + version = "2.0.1-1", + }, + { + name = "rocks-dev.nvim", + url = "nvim-neorocks/rocks-dev.nvim", + version = "1.2.3-1", + }, + { + name = "rocks-git.nvim", + url = "nvim-neorocks/rocks-git.nvim", + version = "1.5.1-1", + }, + { + name = "rocks.nvim", + url = "nvim-neorocks/rocks.nvim", + version = "2.32.0-1", + }, + { + name = "rtp.nvim", + url = "nvim-neorocks/rtp.nvim", + version = "1.0.0-1", + }, + { + name = "rustaceanvim", + url = "mrcjkb/rustaceanvim", + version = "4.25.1-1", + }, + { + name = "schemastore.nvim", + url = "b0o/SchemaStore.nvim", + version = "0.2.0-1", + }, + { + name = "screenkey.nvim", + url = "NStefan002/screenkey.nvim", + version = "2.1.0-1", + }, + { + name = "scrollbar.nvim", + url = "Xuyuanp/scrollbar.nvim", + version = "0.4.0-1", + }, + { + name = "session.nvim", + url = "Kibadda/session.nvim", + version = "2.0.0-1", + }, + { + name = "sg.nvim", + url = "sourcegraph/sg.nvim", + version = "1.1.0-1", + }, + { + name = "smart-splits.nvim", + url = "mrjones2014/smart-splits.nvim", + version = "1.5.0-1", + }, + { + name = "squirrel.nvim", + url = "xiaoshihou514/squirrel.nvim", + version = "1.0.0-1", + }, + { + name = "storm-mode.nvim", + url = "HoppenR/storm-mode.nvim", + version = "1.2.0-1", + }, + { + name = "structlog.nvim", + url = "git+ssh://git@github.com/Tastyep/structlog.nvim.git", + version = "0.1-1", + }, + { + name = "substitute.nvim", + url = "gbprod/substitute.nvim", + version = "2.0.0-1", + }, + { + name = "sweetie.nvim", + url = "NTBBloodbath/sweetie.nvim", + version = "3.1.1-1", + }, + { + name = "tabby.nvim", + url = "nanozuki/tabby.nvim", + version = "2.5.1-1", + }, + { + name = "telescope-zf-native.nvim", + url = "natecraddock/telescope-zf-native.nvim", + version = "1.0.0-1", + }, + { + name = "telescope.nvim", + url = "nvim-telescope/telescope.nvim", + version = "0.1.8-1", + }, + { + name = "todo-comments.nvim", + url = "folke/todo-comments.nvim", + version = "1.2.0-1", + }, + { + name = "toggleterm.nvim", + url = "akinsho/toggleterm.nvim", + version = "2.11.0-1", + }, + { + name = "tokyonight.nvim", + url = "folke/tokyonight.nvim", + version = "3.0.1-1", + }, + { + name = "trouble.nvim", + url = "folke/trouble.nvim", + version = "3.4.3-1", + }, + { + name = "tsc.nvim", + url = "dmmulroy/tsc.nvim", + version = "2.3.0-1", + }, + { + name = "twilight.nvim", + url = "folke/twilight.nvim", + version = "1.0.0-1", + }, + { + name = "unimpaired.nvim", + url = "tummetott/unimpaired.nvim", + version = "0.2.0-1", + }, + { + name = "vgit.nvim", + url = "tanvirtin/vgit.nvim", + version = "0.2.2-1", + }, + { + name = "which-key.nvim", + url = "folke/which-key.nvim", + version = "2.1.0-1", + }, + { + name = "windline.nvim", + url = "windwp/windline.nvim", + version = "1.1.0-1", + }, + { + name = "yanky.nvim", + url = "gbprod/yanky.nvim", + version = "2.0.0-1", + }, + { + name = "yazi.nvim", + url = "mikavilpas/yazi.nvim", + version = "master-1", + }, + { + name = "zen-mode.nvim", + url = "folke/zen-mode.nvim", + version = "1.3.0-1", + }, + { + name = "zk-nvim", + url = "zk-org/zk-nvim", + version = "0.1.0-1", + }, +} + diff --git a/lua/lazy/manage/semver.lua b/lua/lazy/manage/semver.lua index 4e58881..e0a1037 100644 --- a/lua/lazy/manage/semver.lua +++ b/lua/lazy/manage/semver.lua @@ -9,6 +9,7 @@ local M = {} ---@field patch number ---@field prerelease? string ---@field build? string +---@field input? string local Semver = {} Semver.__index = Semver @@ -90,6 +91,7 @@ function M.version(version) patch = patch == "" and 0 or tonumber(patch), prerelease = prerelease ~= "" and prerelease or nil, build = build ~= "" and build or nil, + input = version, }, Semver) end end diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 325f22a..ef6d804 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -9,9 +9,10 @@ local Util = require("lazy.util") ---@field version string ---@field dependencies string[] ---@field build? {build_type?: string, modules?: any[]} +---@field source? {url?: string} ---@class RockManifest ----@field repository table +---@field repository table> local M = {} diff --git a/manifest b/manifest new file mode 100644 index 0000000..ec30b4b --- /dev/null +++ b/manifest @@ -0,0 +1,116407 @@ +commands = {} +modules = {} +repository = { + ['15puzzle.nvim'] = { + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['main-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['2048.nvim'] = { + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['main-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['30log'] = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['3rd-party-oauth'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ab-microsensor'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + abelhas = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + abletonlink = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + abstk = { + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['release-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ac-clientoutput'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ac-luaserver'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['access-token-introspection'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + access_file_data = { + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + } + } + }, + accessor = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + act = { + ['0.10.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.12.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.15.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.16.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['activelua-learningtool'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + } + }, + ['adal-lua'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + add = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['adopure.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ads1015 = { + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['adt.lua'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + adxl345 = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['aerial.nvim'] = { + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + aes_everywhere = { + ['1.1.3-6'] = { + { + arch = "rockspec" + } + }, + ['1.1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + aesfileencrypt = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['afl-lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + aghpb = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ai.nvim'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + aka = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + alfons = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['nil-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['alfons-dev'] = { + ['5.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['alib.eventbus'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + alien = { + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "win32-x86" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + alive = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1rc3-1'] = { + { + arch = "rockspec" + } + }, + ['0.1rc4-1'] = { + { + arch = "rockspec" + } + } + }, + allonet = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + alnbox = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + alogger = { + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['alt-getopt'] = { + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + altdoc = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + amalg = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['amalg-redis'] = { + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['amber-apigw'] = { + ['2.14.1-0'] = { + { + arch = "rockspec" + } + } + }, + amqp = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['amqp-client'] = { + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['amqp-client-52plus'] = { + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['amqp-client-rpc'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + anim8 = { + ['v2.3.1-1'] = { + { + arch = "rockspec" + } + } + }, + annotate = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ansicolors = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ansicolorsx = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ansikit = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ao = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['api-gateway-request-validation'] = { + ['1.3.12-1'] = { + { + arch = "rockspec" + } + } + }, + ['api7-dkjson'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['api7-lua-protobuf'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['api7-lua-resty-dns-client'] = { + ['7.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['api7-lua-resty-http'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['api7-lua-resty-jwt'] = { + ['0.2.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['api7-lua-tinyyaml'] = { + ['0.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['api7-skywalking-nginx-lua'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['api7-snowflake'] = { + ['2.0-1'] = { + { + arch = "rockspec" + } + } + }, + apicast = { + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + ['apicast-cli'] = { + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + apidemo = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + apioak = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + apisix = { + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.9-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.4.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + } + }, + ['2.3-0'] = { + { + arch = "rockspec" + } + }, + ['2.4-0'] = { + { + arch = "rockspec" + } + } + }, + app_scheduler = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + apply_patch_failed = { + ['1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + arbiter = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + arc4random = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + argexpected = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + argmatcher = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + argon2 = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['argon2-ffi'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + argparse = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + argv = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + arluqtools = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + array = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + arrr = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + arweave = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['asciicursor-lua'] = { + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + asklua = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + aspect = { + ['1.10-0'] = { + { + arch = "rockspec" + } + }, + ['1.11-0'] = { + { + arch = "rockspec" + } + }, + ['1.12-0'] = { + { + arch = "rockspec" + } + }, + ['1.13-0'] = { + { + arch = "rockspec" + } + }, + ['1.14-0'] = { + { + arch = "rockspec" + } + }, + ['1.9-0'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + } + }, + ['2.3-0'] = { + { + arch = "rockspec" + } + } + }, + assert = { + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + } + }, + assertex = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + } + }, + astar = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + async = { + ['1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['async-framework'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['async-utils'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['async.lua'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + } + }, + asyncio = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + atlas = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + atpath = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + audiodataload = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['audit-log'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + auproc = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + aurora = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['auth-plugin-configr'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['auth0-nginx'] = { + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.4.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.4.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.4.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.5.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['authy-lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['auto-hlsearch.nvim'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['auto-session'] = { + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + autoblock = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + away = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['away-dataqueue'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['away-luv'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['awesome-audiowheel'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['awesome-autostart'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['awesome-dovetail'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['devel-1'] = { + { + arch = "rockspec" + } + } + }, + ['awesome-ez'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['devel-1'] = { + { + arch = "rockspec" + } + }, + ['devel-2'] = { + { + arch = "rockspec" + } + } + }, + ['awesome-freedesktop'] = { + git = { + { + arch = "rockspec" + } + } + }, + ['awesome-handy'] = { + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['awesome-launch'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['devel-1'] = { + { + arch = "rockspec" + } + } + }, + ['awesome-pulseaudio-widget'] = { + ['0.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['awesome-scratchpad'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['awesome-viewport'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['devel-1'] = { + { + arch = "rockspec" + } + } + }, + ['awesomewm-autostart'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + awestore = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + babel = { + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + } + } + }, + backup = { + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + bakalang = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['balance-tree'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['barcodes.sile'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + base = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + base2base = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + base45 = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + base58 = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + base64 = { + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + base64mix = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + based = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + basedir = { + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + } + }, + basename = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + basexx = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['basic-auth'] = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + basicauth = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + basics = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + battery_status = { + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + } + }, + bawesome = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bbcode = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bcrypt = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['bcrypt-ffi'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + beemovie = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + behaviour_tree = { + ['0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['benchmark-ips'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + benchmarker = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + benchy = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bencode = { + ['1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.2.0-2'] = { + { + arch = "rockspec" + } + } + }, + ber = { + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['better-escape.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['bgcrypto-aes'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['bgcrypto-hmac'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['bgcrypto-lmd5'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['bgcrypto-pbkdf2'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['bgcrypto-sha'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bigint = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-2'] = { + { + arch = "rockspec" + } + } + }, + bin = { + ['5.0-0'] = { + { + arch = "rockspec" + } + }, + ['5.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1-0'] = { + { + arch = "rockspec" + } + } + }, + binaryheap = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + binarystream = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + binarytree = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + } + } + }, + binser = { + ['0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bint = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bintrees = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + biohazardcore = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + } + }, + biolua = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bit32 = { + ['5.2.0alpha.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.1.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bitarray = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + } + } + }, + bitlib = { + ['23-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bitness = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['bitop-lua'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['bitsy-format'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bitvec = { + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['bk-tree'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bkopenssl = { + ['0.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + blackjack = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + } + } + }, + blowfish = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + bme280 = { + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bolt = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['botbye-openresty'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['botway-lua'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + brain = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + brieflz = { + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + brightness = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + brigid = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['brigid-mbedtls'] = { + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['brigid-pcre2'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + brocatel = { + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['brotli-ffi'] = { + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['bufferline.nvim'] = { + ['4.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bufio = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + } + }, + bump = { + ['3.1.5-1'] = { + { + arch = "rockspec" + } + }, + ['3.1.6-1'] = { + { + arch = "rockspec" + } + }, + ['3.1.6-2'] = { + { + arch = "rockspec" + } + }, + ['3.1.7-1'] = { + { + arch = "rockspec" + } + } + }, + ['bump-3dpd'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + busted = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.1-2'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-0'] = { + { + arch = "rockspec" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc1-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc10-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc10-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc11-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc12-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc13-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.rc3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.rc4-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc5-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc6-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc7-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc8-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.rc9-0'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['busted-codewars'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['busted-ffi'] = { + ['2.0.rc12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['busted-flaky'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['busted-hjtest'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + } + }, + ['busted-htest'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['busted-jsonl'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['busted-stable'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + busted_resty = { + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + bustez = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + butter = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['c-lua-package'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + c3 = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-15'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-17'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-19'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-20'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-21'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-23'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-34'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-37'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-39'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-40'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-42'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + caas = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cache = { + ['1.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['cache-mdbx'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['cache-redis'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + cake = { + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + call = { + ['2024.3.4.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2024.3.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2024.3.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2024.3.6.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2024.3.6.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + callbag = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + canary = { + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + } + } + }, + ['canary-oss'] = { + ['1.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + } + } + }, + candran = { + ['0.14.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['canny-redis'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + caribay = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.1-1'] = { + { + arch = "rockspec" + } + }, + ['3.2-1'] = { + { + arch = "rockspec" + } + }, + ['3.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['3.2.2-1'] = { + { + arch = "rockspec" + } + } + }, + carray = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + } + }, + carrot = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cartesix = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + casbin = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.24.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.24.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.25.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.25.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.26.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.27.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.28.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.29.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.30.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.31.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.32.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.32.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.33.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.34.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.34.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.35.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.35.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.36.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.37.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.38.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.39.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.40.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.40.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.41.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.41.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.41.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.41.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.41.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.41.5-1'] = { + { + arch = "rockspec" + } + }, + ['1.41.6-1'] = { + { + arch = "rockspec" + } + }, + ['1.41.7-1'] = { + { + arch = "rockspec" + } + }, + ['1.41.8-1'] = { + { + arch = "rockspec" + } + } + }, + ['casbin-adapter'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + cascproxy = { + ['scm-0'] = { + { + arch = "rockspec" + } + } + }, + cassandra = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + } + }, + ['0.5-3'] = { + { + arch = "rockspec" + } + }, + ['0.5-4'] = { + { + arch = "rockspec" + } + }, + ['0.5-5'] = { + { + arch = "rockspec" + } + }, + ['0.5-6'] = { + { + arch = "rockspec" + } + }, + ['0.5-7'] = { + { + arch = "rockspec" + } + } + }, + cassowary = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + catchify = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + catppuccin = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + catpuccin = { + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cbuf = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['ccc.nvim'] = { + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ccrunx = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ccrunx-compose'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ccrunx-image'] = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cctea = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cdata_table = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cdb = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['centreon-stream-connectors-lib'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + centrilua = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + cfadmin = { + ['beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cffi-lua'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cfg = { + ['1.2-1'] = { + { + arch = "rockspec" + } + } + }, + cgi = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + cgilua = { + ['5.1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['5.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['5.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['5.1.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cgilua-cli'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + chaboksms = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + chacha = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + chain = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + chalk = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + chameleon = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + chance = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['chandra-toml'] = { + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + charm = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + chars = { + ['0.0.0'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + chatter = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + chdir = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + checks = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['chess-fen'] = { + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + chroma = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['chrome-devtools-client'] = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + } + }, + chronos = { + ['0.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ci-template.nvim'] = { + ['4.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cincau = { + ['0.10.20220813-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.20220924-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.20230708-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.20210701-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.20210905-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.20210912-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.20210923-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.20211002-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.20211108-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.20211212-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.20220511-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.20220807-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cipher-log'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cirru-parser'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['citeproc-lua'] = { + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + civ = { + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + civix = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + civtest = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cl = { + ['20100607-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['claims-handler'] = { + ['0.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.12-2'] = { + { + arch = "rockspec" + } + }, + ['4.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.9-1'] = { + { + arch = "rockspec" + } + }, + ['4.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['4.1.0-2'] = { + { + arch = "rockspec" + } + }, + ['4.1.1-10'] = { + { + arch = "rockspec" + } + }, + ['4.1.1-11'] = { + { + arch = "rockspec" + } + }, + ['4.1.1-13'] = { + { + arch = "rockspec" + } + }, + ['4.1.1-3'] = { + { + arch = "rockspec" + } + }, + ['4.1.1-4'] = { + { + arch = "rockspec" + } + }, + ['4.1.1-5'] = { + { + arch = "rockspec" + } + } + }, + class = { + ['0.7-1'] = { + { + arch = "rockspec" + } + } + }, + classic = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + classy = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + classyng = { + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + cldr = { + ['0.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cli = { + ['1.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['cli-app-base'] = { + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + clock = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + cloud_storage = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cluacov = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + clutch = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cm-lua-resty-kafka'] = { + ['0.20-1'] = { + { + arch = "rockspec" + } + } + }, + cmark = { + ['0.23.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.25.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.26.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.27.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.29.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.30.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cmath = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cmd4lua = { + ['0.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cmdbuild = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cmft-base-kong'] = { + ['1.1.0'] = { + { + arch = "rockspec" + } + }, + ['1.2.0'] = { + { + arch = "rockspec" + } + } + }, + ['cmft-kong'] = { + ['1.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['cmp-rg'] = { + ['1.3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cni = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + codec = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + cognitiologger = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + color = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['colorbox.nvim'] = { + ['1.13.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['colorbuddy.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + colorise = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + colormap = { + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + } + } + }, + colors = { + ['8.05.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + colorswatches = { + ['0.9.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['colortils.nvim'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + colyseus = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-3'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['com.logiceditor.fork.crc32'] = { + ['1.1.5.g84430b6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['com.logiceditor.fork.lxsh'] = { + ['0.8.7.7.g1df4485-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + combine = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['commander.nvim'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + commandlineui = { + ['1.69-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.70-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.71-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.72-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.73-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.74-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.75-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.76-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.77-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.78-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['comment-box.nvim'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['comment.nvim'] = { + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + commonmark = { + ['0.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['commons.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['12.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['12.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['15.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['15.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['15.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['16.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['17.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['17.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['18.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['9.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['9.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['9.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + compat52 = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + compat53 = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['comvita-kong-oidc'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + concurrentlua = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + config = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['config-by-env'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + configer = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + configh = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + configparser = { + ['1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['conform.nvim'] = { + ['5.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + conjure = { + ['4.51.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.52.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.52.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + connman_dbus = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + connman_widget = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + context = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + contract = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cookie = { + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + copas = { + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['copas-async'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['copas-ev'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['copas-sse'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + copastimer = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + corenlp = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['coro-http-luv'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + coronalog = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + coronastd = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + coronest = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-14'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-16'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-31'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-35'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-36'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-37'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-40'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + corowatch = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cosmo = { + ['10.03.31-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['10.04.06-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['13.01.30-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.03.04-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['16.06.04-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.02.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['8.04.04-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['8.04.14-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['9.09.22-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + cosock = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cosrun = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cosy-client'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['cosy-instance'] = { + ['0.0-2'] = { + { + arch = "rockspec" + } + } + }, + coutil = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['couyards.sile'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + coxpcall = { + ['1.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cpml-ci'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cpp-compiler-pretty-output'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cppjwt = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cprint = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cpu-widget'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + cputime = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cqueues = { + ['20150119.51-0'] = { + { + arch = "rockspec" + }, { + arch = "linux-x86_64" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['20150119.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150119.52-0'] = { + { + arch = "rockspec" + }, { + arch = "linux-x86_64" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['20150119.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150119.53-0'] = { + { + arch = "rockspec" + } + }, + ['20150119.53-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150907.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150907.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150907.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160316.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160316.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160316.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160808.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160808.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160808.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160812.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160812.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160812.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160812.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160812.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20160812.53-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161018.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161018.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161018.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161214.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161214.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161214.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161215.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161215.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161215.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20171014.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20171014.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20171014.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20190731.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20190731.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20190731.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20190813.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20190813.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20190813.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20200603.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20200603.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20200603.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20200726.51-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20200726.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20200726.53-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20200726.54-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cqueues-pgsql'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + crater = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + crayon = { + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + crc32 = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + createtable = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + crescent = { + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + crimp = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + croissant = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-6'] = { + { + arch = "rockspec" + } + } + }, + csn7 = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + csplit = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + csv = { + ['1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + csv2tensor = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + } + }, + ctc = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ctrim = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ctrl-oidc-transformer'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cue = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cuid = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cw = { + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cwnu-drcom'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.2-0'] = { + { + arch = "rockspec" + } + } + }, + cwtest = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cx-gumbo'] = { + ['0.4-1'] = { + { + arch = "rockspec" + } + } + }, + cxt = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cyan = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['cybu.nvim'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + cyrussasl = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-3'] = { + { + arch = "rockspec" + } + } + }, + dado = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.4.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.7.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-3'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + daemonparts = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dag-to-lua'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + danetool = { + ['4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + darksidesync = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + darwin = { + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + } + }, + data2string = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + } + } + }, + ['datadome-openresty'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + datadumper = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + datafile = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dataframe = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + date = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['daylight.nvim'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dbhys-openresty-skywalking'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dbus_proxy = { + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['dd-lua-tester'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ddt = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['deadcolumn.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['debug.lua'] = { + ['0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + debugger = { + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + debugkit = { + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['debugkit-extra'] = { + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + decasify = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['decipher.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dedlit = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + deimos = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + delaunay = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + denque = { + ['0.5.1-1'] = { + { + arch = "rockspec" + } + } + }, + densearrays = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + depgraph = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + deq = { + ['0.4.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + } + } + }, + deque = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['detour.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dev-roshangeorge-ljsonschema'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + deviant = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dial.nvim'] = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dialplan = { + ['0.0-3'] = { + { + arch = "rockspec" + } + } + }, + ['dickens7-snowflake'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + } + } + }, + diff = { + ['8.06.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.06.15-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + digestif = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['digifi-lua-resty-session'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['digiprime-jwt'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + digitalfilter = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dirname = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + discount = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + } + }, + diskop = { + ['1.21.07.29-1'] = { + { + arch = "rockspec" + } + }, + ['1.21.08.13-1'] = { + { + arch = "rockspec" + } + } + }, + diskqueue = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dislua = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['distant.nvim'] = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + djot = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dkjson = { + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dns = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + } + }, + doc = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + doccotest = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + docker = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + docopt = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + docroc = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dogma-core'] = { + ['1.0.alpha1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta11-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta12-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta13-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta13-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta14-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta14-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta14-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta15-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta16-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta16-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta16-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta17-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta17-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta17-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta17-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta18-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta19-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta20-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta21-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta21-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta22-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta23-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta24-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta25-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta25-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta25-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta26-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta27-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta28-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta29-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta30-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta31-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta31-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta32-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta33-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta34-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc10-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc12-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc12-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc12-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc12-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc12-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc12-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc13-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc14-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc15-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc16-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc17-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc18-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc18-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc18-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc18-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc8-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dogmac = { + ['1.0.alpha1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.alpha9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta12-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta13-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta14-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta15-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta16-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta17-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta18-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta19-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta20-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta21-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta22-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta23-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta24-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta25-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta26-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta27-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta28-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta29-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta30-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta31-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta31-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta32-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta33-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta34-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.beta9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc12-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc13-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc14-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc15-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc16-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc17-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc18-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.rc9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + domotest = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['donut.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dotenv = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dprint = { + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dr.msgpuck'] = { + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dr.tap'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-14'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-15'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-16'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dressing.nvim'] = { + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-amalgamate'] = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-calendar'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-chunk'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-commons'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.24-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.28-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.29-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.30-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.31-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.32-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.33-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.35-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.36-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.37-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.38-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.39-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.40-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.41-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.42-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.43-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.45-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.46-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.47-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.48-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.49-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.50-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.53-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.54-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.55-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.56-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.57-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.58-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.59-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.60-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.61-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.63-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.64-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-compiler'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-curl'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-dom'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-dyld'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-fuse'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-future'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-graph'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.24-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.28-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.29-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.30-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.31-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.32-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.33-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.35-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.36-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.37-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.38-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.39-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.40-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.41-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-http'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-image'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-jpeg'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-json'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-lambda'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-multi'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-parser'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-png'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-primitives'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-prl'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-regexp'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-serializer'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-shlex'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-socks'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-sqlite3'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.24-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-tree'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-ubench'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-unix'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.24-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.28-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.29-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.30-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.31-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.32-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.33-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.35-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.36-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.37-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.38-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.39-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.40-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.41-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.42-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.43-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.45-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.46-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.47-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.48-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.49-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.50-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.53-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.54-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.55-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.56-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.57-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.58-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.59-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.60-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.61-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.62-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.63-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.64-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.65-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.66-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.67-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.68-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.69-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.70-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.71-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.72-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-utf8'] = { + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-vecmath'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-xml'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dromozoa-zmq'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dropbar.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + drylib = { + ['0.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ds = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dtracing = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['du-bundler'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['du-mocks'] = { + ['0.24.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.25.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.26.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.26.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.29.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.29.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dub = { + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dublang = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['duck.nvim'] = { + ['main-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dumbluaparser = { + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['dummy.lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dump = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + } + }, + dumper = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + dyana = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['eagle-lua-package'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + eansi = { + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['easy-http'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['easyjevko.lua'] = { + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['easypick.nvim'] = { + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['eaw-abstraction-layer'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ecasound = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + eccles = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + eclass = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + edge = { + ['0.0.1-10'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-11'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-12'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-13'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-6'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-7'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-8'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-9'] = { + { + arch = "rockspec" + } + } + }, + ['edgy.nvim'] = { + ['1.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['editorconfig-core'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + eff = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + effil = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + eja = { + ['1-0'] = { + { + arch = "rockspec" + } + } + }, + elasticsearch = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['elasticsearch-lua'] = { + ['1.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ele = { + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + elementslib = { + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + elfmap = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + elfs = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + elfutils = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['elixir-tools.nvim'] = { + ['0.13.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + elprofiler = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + elscheduler = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['embedders.sile'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + emdcriterion = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + emitter = { + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + emma = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + emoji = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['emoji-clock'] = { + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + emojify = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['empty-params-blocker'] = { + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ena = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-2'] = { + { + arch = "rockspec" + } + } + }, + ['enapter-sma'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['enapter-ucm'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['endel-struct'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + enet = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + enum = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + env = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + environ = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + epoll = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + } + }, + erde = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['erento-lua-rfc-4122-uuid-generator'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ergonomic_seed = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + errno = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + } + }, + error = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.10.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + } + } + }, + escher = { + ['0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-15'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-16'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-17'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['esk-lua-resty-auto-ssl'] = { + ['0.13.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + espeon = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.9-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.10-0'] = { + { + arch = "rockspec" + } + }, + ['1.11-0'] = { + { + arch = "rockspec" + } + }, + ['1.12-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + } + }, + ['1.8-0'] = { + { + arch = "rockspec" + } + }, + ['1.9-0'] = { + { + arch = "rockspec" + } + } + }, + etcd = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + etf = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + etlua = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + evdev = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + eventbus = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + eventemitter = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + evm = { + ['0.10.0-1'] = { + { + arch = "rockspec" + } + } + }, + exaerror = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['exasol-virtual-schema-common-lua'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['exasol-virtual-schema-lua'] = { + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + exec = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + } + }, + exists = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + exit = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + expadom = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + expect = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['expect-promise'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['expect-spy'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ext-plugin-proto'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['extend.sile'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['external-auth'] = { + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['external-oauth'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['external-oauth2'] = { + ['1.2-6'] = { + { + arch = "rockspec" + } + } + }, + ['external-oauth3'] = { + ['1.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['external-oid'] = { + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + extname = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ezenv = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + } + }, + ezserv = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + } + }, + f = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['f-strings'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['f.lua'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fa-icons-4'] = { + ['1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + faker = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fakeredis = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + faketorio = { + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + families = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fancytoc.sile'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + fat_error = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fauxo = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fbclient = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fcgi = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fd = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + feedparser = { + ['0.71-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.71-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.71-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['feline.nvim'] = { + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fennel = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fennel-ls'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fennel_rblx = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fenster = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ff = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ff-lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fffonion-busted'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fffonion-lua-resty-kafka'] = { + ['0.15-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ffi-bzlib'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ffi-hyperparser'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ffiex = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fhirformats = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['fi-luajit'] = { + ['1.0'] = { + { + arch = "rockspec" + } + } + }, + fiber = { + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fidget.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fifo = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + filament = { + ['v1.0-1'] = { + { + arch = "rockspec" + } + }, + ['v1.1-1'] = { + { + arch = "rockspec" + } + } + }, + filekit = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + finally = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + finita = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + fir = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + firebase = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['flash.nvim'] = { + ['1.18.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['flatbuffers-lib'] = { + ['2.0.0-5'] = { + { + arch = "rockspec" + } + } + }, + flatfile = { + ['1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['flatten.nvim'] = { + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + flirt = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['flomesh-kong-plugin-session'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + } + }, + ['2.1.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['flomesh-lua-resty-healthcheck'] = { + ['0.6.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['flomesh-lua-resty-kafka'] = { + ['0.01-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.01-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.01-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.01-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.01-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + flos = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + flot = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + fltk4lua = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + flu = { + ['20101020-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20121106-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20121212-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150331-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20181218-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fluent = { + ['0.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fluidsynth = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['flutter-tools.nvim'] = { + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fly-bgcrypto-pbkdf2'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fly-bgcrypto-sha'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + flyzip = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fmtstr = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['focus.nvim'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fontproof = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fork = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['fork3-sc-lua-resty-auto-ssl'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + } + } + }, + form = { + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['form-multipart'] = { + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['form-urlencoded'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + forma = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + formatter = { + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + formatterfiveone = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fp = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fr = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + freetype = { + ['20140717-1'] = { + { + arch = "rockspec" + } + }, + ['20160824-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['freeze-code.nvim'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fs-utils'] = { + ['1.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fsm = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fsoutcall = { + ['1.0.1-8'] = { + { + arch = "rockspec" + } + } + }, + fsrouter = { + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + } + } + }, + fss = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fstat = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + } + }, + ftcsv = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fugit2.nvim'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fullscript-kong-oidc'] = { + ['1.2.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fun = { + ['0.1.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['fun-alloyed'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['function.lua'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + functional = { + ['0.10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-2'] = { + { + arch = "rockspec" + } + }, + ['0.9-3'] = { + { + arch = "rockspec" + } + }, + ['0.9-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + functorflow = { + ['0'] = { + { + arch = "rockspec" + } + } + }, + ['funnyfiles.nvim'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fusionscript = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fzf-lua'] = { + ['0.0.1000-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1003-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1005-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1007-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1009-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1011-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1013-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1017-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1019-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1021-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1023-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1024-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1026-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1027-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1028-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1031-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1033-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1035-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1037-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1039-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1040-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1046-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1048-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1049-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1052-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1053-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1055-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1058-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1059-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1061-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1064-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1065-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1066-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1067-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1068-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1070-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1071-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1072-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1075-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1076-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1079-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1080-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1084-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1085-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1090-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1091-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1093-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1095-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1097-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1098-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1099-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1100-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1102-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1103-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1106-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1107-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1110-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1111-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1112-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1114-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1117-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1118-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1121-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1131-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1132-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1134-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1136-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1141-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1144-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1147-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1151-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1155-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1161-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1166-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1170-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1171-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1172-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1175-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1179-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1181-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1184-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1186-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1187-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1190-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1191-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1192-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1194-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1195-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1196-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1202-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1207-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1211-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1213-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1216-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1219-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1220-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1221-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1222-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1225-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1226-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1229-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1231-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1232-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1243-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1246-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1253-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1255-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1261-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1264-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1265-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1266-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1268-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1269-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1273-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1274-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1277-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1278-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1283-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1286-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1287-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1288-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1289-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1291-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1294-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1296-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1298-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1301-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1302-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1304-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1309-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1313-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1318-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1320-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1323-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1334-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1337-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1338-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1340-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1341-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1342-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1349-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1350-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.769-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.771-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.776-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.777-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.778-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.780-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.783-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.785-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.788-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.789-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.790-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.794-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.795-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.797-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.798-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.799-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.800-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.804-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.807-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.809-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.810-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.811-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.814-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.815-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.817-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.821-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.823-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.825-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.827-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.831-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.832-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.834-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.837-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.839-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.844-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.847-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.850-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.851-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.853-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.854-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.855-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.856-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.858-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.860-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.863-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.865-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.872-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.874-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.875-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.877-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.878-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.886-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.887-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.888-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.896-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.897-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.898-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.903-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.906-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.912-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.916-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.918-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.921-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.924-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.928-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.929-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.931-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.936-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.939-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.940-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.942-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.943-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.949-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.951-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.954-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.955-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.956-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.958-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.960-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.961-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.964-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.965-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.967-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.968-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.970-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.974-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.975-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.977-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.978-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.981-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.983-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.984-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.986-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.990-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.993-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.996-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['fzfx.nvim'] = { + ['3.7.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + fzy = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['main-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + galconmodslib = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['galileo.nvim'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gambiarra = { + ['0.4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['game-tools'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-3'] = { + { + arch = "rockspec" + } + } + }, + gamecake = { + ['18-005'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['18-006'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['22-001'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gauge = { + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gbk = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gcfn = { + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + gear = { + ['0.01-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.02-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.03-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + geezifylua = { + ['0.1.3-2'] = { + { + arch = "rockspec" + } + } + }, + ['genesi-password'] = { + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + } + } + }, + genny = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gentags.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + geo = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + geoip2 = { + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gerar_cpf_cnpj = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + getcwd = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + getenv = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + getopt = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + } + } + }, + getopts = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + getpid = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + getsize = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ggram = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gh-md-toc'] = { + ['1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ghl-lua-auto-ssl'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ghl-lua-resty-auto-ssl'] = { + ['0.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + giflib = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gimlet-cocktail'] = { + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gimlet-render'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gimple = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gin = { + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + girvel = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['git-worktree.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + github = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['github-nvim-theme'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gitlinker.nvim'] = { + ['4.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.12.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.12.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gitsigns.nvim'] = { + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + giturlparser = { + ['1.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + glass = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + glfw = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['globals-lua'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['glow.nvim'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + glum = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gluu-oauth2-client-auth'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gluu-oauth2-rs'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + glyphify = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gmi = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gntp = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gnucrypt = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['go.nvim'] = { + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gobo-awesome'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gobo-awesome-alttab'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gobo-awesome-battery'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gobo-awesome-bluetooth'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gobo-awesome-gobonet'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gobo-awesome-light'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gobo-awesome-screenlock'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gobo-awesome-sound'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['godo.nvim'] = { + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + golflike = { + ['0.6b-1'] = { + { + arch = "rockspec" + } + } + }, + gomaxmagick = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gonapps-cookie'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + } + } + }, + ['gonapps-jwt'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + } + } + }, + ['gonapps-url-decoder'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + } + } + }, + ['gonapps-url-encoder'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + } + } + }, + ['gonapps-url-query-parser'] = { + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + } + } + }, + ['gonapps-url-router'] = { + ['1.1-2'] = { + { + arch = "rockspec" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + } + }, + gpoll = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + } + } + }, + grapheme = { + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + graphql = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['graphql-parser'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + graphviz = { + ['v1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['grapple.nvim'] = { + ['0.17.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.18.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.18.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.22.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.25.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.26.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.27.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.29.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.30.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + grasp = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + grid = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['grpc-client-nginx-module'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gruvbox-baby'] = { + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gruvbox.nvim'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gt-mp-prometheus-plugin'] = { + ['1.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + } + } + }, + guard = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + guardia = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gumbo = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + gversion = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gwa-kong-endpoint'] = { + ['1.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['gxid-bearer'] = { + ['0.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['4.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['4.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['4.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['4.1.2-2'] = { + { + arch = "rockspec" + } + }, + ['4.1.2-60'] = { + { + arch = "rockspec" + } + }, + ['4.1.3-61'] = { + { + arch = "rockspec" + } + }, + ['4.1.3-62'] = { + { + arch = "rockspec" + } + }, + ['4.1.3-63'] = { + { + arch = "rockspec" + } + }, + ['4.1.3-64'] = { + { + arch = "rockspec" + } + }, + ['4.1.3-65'] = { + { + arch = "rockspec" + } + }, + ['4.1.3-72'] = { + { + arch = "rockspec" + } + } + }, + ['gxid-param'] = { + ['1.0.0-2'] = { + { + arch = "rockspec" + } + } + }, + ['gxs-auth'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-2'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-3'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-10'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-4'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-5'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-6'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-7'] = { + { + arch = "rockspec" + } + }, + ['2.0.3-11'] = { + { + arch = "rockspec" + } + }, + ['2.0.3-12'] = { + { + arch = "rockspec" + } + } + }, + h5tk = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + halo = { + ['1.1.8-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['haproxy-lua-acme'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['haproxy-lua-http'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + haricot = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + harpseal = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + } + } + }, + harryplotter = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hash = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hash-code'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hasher = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hashids = { + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['haskell-snippets.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['haskell-tools.nvim'] = { + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['haxe-deps'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-6'] = { + { + arch = "rockspec" + } + } + }, + hc = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + hdf5 = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hdrhistogram = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['header-transfer'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['headlines.nvim'] = { + ['4.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + heaps = { + ['1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hectorm-fork-http'] = { + ['0.3.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['heirline.nvim'] = { + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + heka_mock = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + helloluarocks = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + helloworld = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['heroku-openresty'] = { + ['1.2.8.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hex = { + ['1.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + hexterm = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hfun = { + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['master-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hglib = { + ['0.8-1'] = { + { + arch = "rockspec" + } + } + }, + ['hires-time'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['hjson-lua'] = { + ['0.1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hlchunk.nvim'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hmac = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['hmac-auth-okadoc'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + homie = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hook_nt_create_file = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + horchata = { + ['0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + host = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['host-interpolate-by-header'] = { + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hotfix = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['hotfix-gen'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hotpot.nvim'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hotswap = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hotswap-ev'] = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hotswap-hash'] = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hotswap-http'] = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hotswap-lfs'] = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + howl = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hprose = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hsluv = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hsm_statechart = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ht16k33 = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + htk = { + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.0-2'] = { + { + arch = "rockspec" + } + }, + ['3.5-1'] = { + { + arch = "rockspec" + } + } + }, + ['html-entities'] = { + ['1.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['html-tags'] = { + ['0.1.20210829-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.20210909-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.20211012-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + htmlparser = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + httoolsp = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + http = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + ['http-digest'] = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + httpclient = { + ['0.1.0-3'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-5'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-6'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-7'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + httprequestparser = { + ['ver-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['ver-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['ver-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hump = { + ['0.4-2'] = { + { + arch = "rockspec" + } + } + }, + hungarian = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + huntable = { + ['0.9-1'] = { + { + arch = "rockspec" + } + } + }, + hurdy = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + } + } + }, + husl = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + hussar = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hx-lua-simdjson'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['hydra.nvim'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['hylaa-im-auth'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['hyper-ecs'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + i18n = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.2-1'] = { + { + arch = "rockspec" + } + } + }, + iame = { + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + icecream = { + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['icecream-lua'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + icu = { + ['0.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + idn2 = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + idna = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ihelp = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['image.nvim'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + image_handler = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + imagesize = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + imgui = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + immutable = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['imp-appsec-connector'] = { + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['incline.nvim'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['indent-blankline.nvim'] = { + ['3.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + indexedpng = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + inet = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ingress-nginx-safeline'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + inifile = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + inilazy = { + ['1.05-1'] = { + { + arch = "rockspec" + } + } + }, + injarg = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + inline = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + inotify = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + inspect = { + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.0-2'] = { + { + arch = "rockspec" + } + }, + ['3.0-3'] = { + { + arch = "rockspec" + } + }, + ['3.0-4'] = { + { + arch = "rockspec" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.2-0'] = { + { + arch = "rockspec" + } + }, + ['3.1.3-0'] = { + { + arch = "rockspec" + } + } + }, + intconvert = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['io-close'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-fileno'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-fopen'] = { + ['0.1.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-isfile'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-reader'] = { + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-readn'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-tofile'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-truncate'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-wait'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-writer'] = { + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['io-writev'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ioex = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['ios-icons'] = { + ['1.1-1'] = { + { + arch = "rockspec" + } + } + }, + iovec = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + } + }, + ip2location = { + ['8.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ip2locationio = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ip2proxy = { + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ipdb = { + ['beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['beta-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ipipx = { + ['beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ipqs-db-reader'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['irc-engine'] = { + ['5.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.0.pre5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['irc-formatter'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['irc-parser'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ircmess = { + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['iresty-nginx-lua-prometheus'] = { + ['0.20190917-0'] = { + { + arch = "rockspec" + } + } + }, + iris = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + is = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + isa = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + isodd = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + iter = { + ['0.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + itertools = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + itte = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + iwi = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jeejah = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-3'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jestronaut = { + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['jevko.lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jmespath = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jnet = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['johngrib.hammerspoon.caffein'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['johngrib.hammerspoon.winmove'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jps = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + jsmin = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['json-logic-lua'] = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['json-lua'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + } + } + }, + ['json-rock'] = { + ['2.0-4'] = { + { + arch = "rockspec" + } + } + }, + ['json-rpc'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['json-threat-protection'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['json.lua'] = { + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + json2lua = { + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + json4lua = { + ['0.9.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.30-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jsonnet = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jsonpath = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + jsonrpc4lua = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jsonschema = { + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.9-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['jsonschema-gitless'] = { + ['0.9-0'] = { + { + arch = "rockspec" + } + } + }, + ['jsonschema-mocker'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jsregexp = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['jumbleberry-auto-ssl'] = { + ['0.13.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['jumbleberry-dogstatsd'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['jumbleberry-statsd'] = { + ['3.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + jumper = { + ['1.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0'] = { + { + arch = "rockspec" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + jwks_aware_oauth_jwt_access_token_validator = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + jwt = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + } + } + }, + ['jwt-jitsi'] = { + ['0.6-2'] = { + { + arch = "rockspec" + } + } + }, + ['k-stream'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['k-sway'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + kafka = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kai.nvim'] = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + kcp = { + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + kcp2 = { + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kemi-test-suite'] = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-4'] = { + { + arch = "rockspec" + } + }, + ['0.3-5'] = { + { + arch = "rockspec" + } + }, + ['0.3-6'] = { + { + arch = "rockspec" + } + }, + ['0.3-7'] = { + { + arch = "rockspec" + } + } + }, + keyauthvaluepass = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['keycloak-rbac'] = { + ['1.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + kikgit = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + kiwi = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + klib = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + kong = { + ['0.1.0beta-3'] = { + { + arch = "rockspec" + } + }, + ['0.1.1beta-2'] = { + { + arch = "rockspec" + } + }, + ['0.10.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.10.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.10.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.10.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.10.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.11.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.11.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.11.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.12.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.12.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.13.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.14.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.14.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.8.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.8.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.8.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.8.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.9-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0rc2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-advanced-router'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-aggregator'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['kong-aliyun-http-filter'] = { + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-api-composition'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-auth-key-jwt-server'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-10'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-5'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-6'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-7'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-8'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-9'] = { + { + arch = "rockspec" + } + } + }, + ['kong-auth-request'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-auth-request-trans'] = { + ['0.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-auth-signature'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + } + } + }, + ['kong-authz-proxy'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-auto-https'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-cassandra'] = { + ['0.5-8'] = { + { + arch = "rockspec" + } + } + }, + ['kong-circuit-breaker'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-client'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-cluster-drain'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-consumer-rate-limiting'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-consumer-route'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-custom-error-handlers'] = { + ['0.3.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-datadog-k8s'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-easter-eggs'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-enhanced-http-log'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-14'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-15'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-16'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-17'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-18'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-19'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-20'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-21'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-22'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-23'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-24'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-25'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-26'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-27'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-28'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-29'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-30'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-31'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-enhanced-oidc'] = { + ['1.0.0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-error-log'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-event-pub'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-event-pub-plugin'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-ext-auth'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-external-auth'] = { + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-external-auth-plugin'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-external-oauth'] = { + ['1.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-14'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-15'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-16'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-17'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-file-log-exclusion'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-force-https'] = { + ['0.1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-force-ssl'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-forward-proxy'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-forwarded-user-auth'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-header-access-control'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-http-to-https'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-http-to-https-redirect'] = { + ['0.13.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-https-redirect'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-influxdb'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-ip-location'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-jwt-claim-headers'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-jwt-firebase'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-22'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-23'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-24'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-8'] = { + { + arch = "rockspec" + } + } + }, + ['kong-jwt2header'] = { + ['1.0-3'] = { + { + arch = "rockspec" + } + } + }, + ['kong-jwt2header-raftx24'] = { + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-kafka-custom-log'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-kafka-log'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-keycloak'] = { + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-lapis'] = { + ['1.14.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.7.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-lib-logger'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-log-google'] = { + ['1.4-6'] = { + { + arch = "rockspec" + } + } + }, + ['kong-lua-ffi-zlib'] = { + ['0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-lua-resty-kafka'] = { + ['0.10-0'] = { + { + arch = "rockspec" + } + }, + ['0.11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.18-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-lua-sandbox'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-luasec'] = { + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-mocking-advanced'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-mtls-validate'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-o2b-ticketing'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-oauth-proxy'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-oauth2-ext'] = { + ['0.0.1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-oidc'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-oidc-adfs'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-oidc-auth'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-oidc-auth-akshay'] = { + ['0.1-3'] = { + { + arch = "rockspec" + } + } + }, + ['kong-oidc-by-prashanth'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-oidc-consumer'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-oidc-forward-host'] = { + ['1.1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-oidc-google-groups'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-10'] = { + { + arch = "rockspec" + } + }, + ['0.1-11'] = { + { + arch = "rockspec" + } + }, + ['0.1-12'] = { + { + arch = "rockspec" + } + }, + ['0.1-13'] = { + { + arch = "rockspec" + } + }, + ['0.1-14'] = { + { + arch = "rockspec" + } + }, + ['0.1-15'] = { + { + arch = "rockspec" + } + }, + ['0.1-16'] = { + { + arch = "rockspec" + } + }, + ['0.1-17'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + } + }, + ['0.1-8'] = { + { + arch = "rockspec" + } + }, + ['0.1-9'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + } + } + }, + ['kong-oidc-ng'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-oidc-test'] = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-oidc-v2'] = { + ['2.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-oidc-v3'] = { + ['1.3.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-oidc-ws-rbac'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-opa'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-opa-plugin'] = { + ['0.0.1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-path-allow'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-path-based-routing'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-path-rewrite'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-path-whitelist'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-payload-size-limiting'] = { + ['0.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-pgmoon'] = { + ['1.16.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-phantom-token'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-abac'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-abtesting'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-acl-keycloak'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-acme'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-acp'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['kong-plugin-add-header'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-add-header-to-request'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-add-headers'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-amqp'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-6'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-amqp-rpc'] = { + ['1.0.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-api-key-access-control'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-api-transformer'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-api-version'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-api-version-1'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-apikey-validator'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.9-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-auth-endpoint-config-ishare'] = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-authz'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-aws-api-gateway-auth'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-aws-kinesis'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-aws-lambda'] = { + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-aws-lambda-response-transformer'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-aws-lambda-status-code'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-azure-functions'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-bearer'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-cads-jwt-keycloak'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-cads-stash-body-in-ctx'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-check-permissions'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-circuit-breaker'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-concurrent-connections-quota'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-connections-quota'] = { + ['0.1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-consumer-cors'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-cookies-to-headers'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-csp'] = { + ['0.1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-custom'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-custom-rt'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-datadog-tags'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-datadome'] = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-dbless-reload'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-ddtrace'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-debug'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-detect-path'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-deviceuid'] = { + ['0.2.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-download-limiter'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-dynamic-route'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-endpoint-access-control'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-escher'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-escher-signer'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-extend-headers'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-file-log-advanced'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-file-log-extended'] = { + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + ['kong-plugin-first-plugin'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-flexible-rate-limit'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-geo-restriction'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-geoip'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-google-cloud-functions'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-google-logging'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-google-recaptcha'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-google-storage-adapter'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.12-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.6-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.7-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-grpc-gateway'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-grpc-web'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-gwa-ip-anonymity'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-hal'] = { + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-header-based-rate-limiting'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-header-based-request-termination'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-header-translator'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-headercheck'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-headers-validation'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-hello'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-hello-world'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-hello-you'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-helloworld'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-html-replacer'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-http-log-multi-body'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-http-log-with-body'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-http-log-with-body-base64'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-http-mirror'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-http301https'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-ice-grpc-gateway'] = { + ['0.0.1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.3'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-3'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-2'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-ice-jaeger'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-idempotency'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-impart'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-inigo'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-jdy-signature'] = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jq-transformer'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-json-threat-protection'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jurnal-oauth2'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jwt'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-jwt-auth'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jwt-auth-rbac'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jwt-auth-token-validate'] = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jwt-blacklist'] = { + ['0.1.1-6'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-3'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-2'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-3'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-4'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-5'] = { + { + arch = "rockspec" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.6-2'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-jwt-claims-headers'] = { + ['1.0-2'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-jwt-claims-to-headers'] = { + ['0.2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jwt-claims-validate'] = { + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jwt-crafter'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['kong-plugin-jwt-crafter-for-ee'] = { + ['1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-jwt-fetcher'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jwt-keycloak'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-jwt-rbac'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['kong-plugin-jwt-up'] = { + ['1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jwt-validation'] = { + ['1.2-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-jwt-verifier'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-kafka-log'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-key-auth-referer'] = { + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-key-secret'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-keycloak-auth-request'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-kong-plugin-auth'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-kubernetes-sidecar-injector'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-log-extended'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-lua-resty-waf'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + ['kong-plugin-maxmind-geoip2'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-mihelloworld'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-mithril'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-mitm'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-mm-rate-limiting'] = { + ['0.0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-mongologger'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-mpay-jurnal'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-mtls-auth'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-mtls-validate'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-myplugin'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-myplugin1'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-myredirect'] = { + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-newrelic-insights'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-ngsi-ishare-policies'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-oasvalidator'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-oauth2-audience'] = { + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-oauth2-token-introspection-request'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-oidc'] = { + ['1.3.6-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-oidc-acl'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-oidc-acl-fix'] = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-opa'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-opa2'] = { + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-openwhisk'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-optional-jwt'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-ory-kratos'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-param-transformer'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-paseto'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-path-prefix'] = { + ['0.1.0-2'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-path-replacer'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-perimeterx'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-ping-auth'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-pipeline'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-prometheus'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-proxy-cache'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-proxycache'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-queryparams-to-headers'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-ram'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-rate-limiting-quotas'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-rbac'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-redirect'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-redis-auth'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-referer'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-referer-blacklist'] = { + ['2.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-replace-url'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-request-firewall'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-request-response-logging'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-request-start'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-request-transformer'] = { + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-request-validator'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-reroute-after'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-reroute-around'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-reroute-before'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-resource-transformer'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-respond-redirect'] = { + ['0.10.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-response-cache'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-response-transformer-tobase64'] = { + ['1.0-5'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-rewrite'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-route-by-cookie'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-route-by-jsonrpc-method'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-rule-based-header-transformer'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-sa-jwt-claims-validate'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-serverless-functions'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-session'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-shepherd'] = { + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-signalfx'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-skywalking'] = { + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-sliding-window-rate-limiting'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-soap-transform'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-soap4kong'] = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-soap4kong-generator'] = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-static-response'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-stdout-log'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-subdomain-as-header'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-sync-eureka'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-tag-executor'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-template'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-template-transformer'] = { + ['0.10.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-the-fuckman'] = { + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-the-middleman'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-tmim-forward-proxy'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-token-agent'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-token-to-header-extractor'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-traceable'] = { + ['1.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-universal-jwt'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-uoa-soap-to-rest'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-uppercase-response'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-upstream-auth-basic'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-upstream-basic-auth'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-upstream-environment'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-upstream-google-id-token'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-upstream-oauth2'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-upstream-redirect'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-upstream-selector'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-url-prefix'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-url-regex-rewriter'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-3'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-url-replace'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-url-rewrite'] = { + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-usagelogger'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-user-profile-validation'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-wait'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-wayz-log'] = { + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-wsse'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-xml-search'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-plugin-xml-threat-protection'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugin-zipkin'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-plugins-openidc'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-post-auth-hook'] = { + ['0.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + } + }, + ['kong-pre-auth-hook'] = { + ['0.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.0-3'] = { + { + arch = "rockspec" + } + }, + ['0.0-4'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + } + }, + ['1.1-5'] = { + { + arch = "rockspec" + } + }, + ['1.1-6'] = { + { + arch = "rockspec" + } + }, + ['1.1-7'] = { + { + arch = "rockspec" + } + } + }, + ['kong-prometheus-plugin'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.4-2'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-proxer'] = { + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.0-3'] = { + { + arch = "rockspec" + } + }, + ['2.0-4'] = { + { + arch = "rockspec" + } + }, + ['2.0-5'] = { + { + arch = "rockspec" + } + }, + ['2.0-6'] = { + { + arch = "rockspec" + } + } + }, + ['kong-proxy-cache-plugin'] = { + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-redis-cluster'] = { + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-request-allow'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-request-header'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-request-intercept'] = { + ['0.1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-request-jwt-header'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-response-log'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-response-size-limiting'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-rhsso'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + } + }, + ['kong-safeline'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-scalable-rate-limiter'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-segment-log'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-service-virtualization'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-signature-and-remove-attr'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-simple-request-validator'] = { + ['0.0.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-siteminder-auth'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-skywalking'] = { + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-slack-hmac'] = { + ['0.12.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-spec-expose'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-splunk-handler'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-splunk-log'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-splunk-log-customized'] = { + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.9-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-startbid-oidc-acl'] = { + ['1.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['kong-timechecking'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + } + } + }, + ['kong-tx-debugger'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-uma-rs'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-upstream-hmac'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-upstream-jwt'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-upstream-jwt-extended'] = { + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['kong-user-agent-based-routing'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['kong-virtual-endpoints'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + kong_injection = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + kong_plugin_salt_sensor = { + ['1.0.0-3'] = { + { + arch = "rockspec" + } + } + }, + kosmo = { + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + kpgmoon = { + ['1.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + kqueue = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + } + }, + krpc = { + ['0.1.11-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.12-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.10-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.11-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.9-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.4-0'] = { + { + arch = "rockspec" + } + } + }, + kvpairs = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['labelrefs.sile'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + lacord = { + ['1569435811-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1569631241-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1574559577-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1574559577-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1582301062-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1590965828-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1617477179-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1618833413-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1619975269-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1622157568-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1627995481-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1627995481.88199-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1629838555-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1637789515-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lacord-client'] = { + ['3174939966-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lain = { + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + lake = { + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lalarm = { + ['20061011-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20090501-1'] = { + { + arch = "rockspec" + } + }, + ['20090501-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120503-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lambda = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lamda = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + landlord = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lanes = { + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.10.1-1'] = { + { + arch = "rockspec" + } + }, + ['3.11-1'] = { + { + arch = "rockspec" + } + }, + ['3.13.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.13.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.15.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.15.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.16.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.16.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.16.2-0'] = { + { + arch = "rockspec" + } + }, + ['3.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + language = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + languagedetect = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + lap = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lapis = { + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-annotate'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-bayes'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-cache'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-community'] = { + ['1.36.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.37.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.38.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.40.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.41.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.42.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.42.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.42.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.43.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-console'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-crud'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lapis-eswidget'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-exceptions'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-redis'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-spec-screenshot'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lapis-systemd'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lapis_layout = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + lascii85 = { + ['20070627-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['20100323-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120927-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + latclient = { + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['launchdarkly-server-sdk'] = { + ['2.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['launchdarkly-server-sdk-redis'] = { + ['2.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lauxhlib = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + } + } + }, + laws = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + layeredata = { + ['0.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + } + } + }, + ['lazy.nvim'] = { + ['10.17.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.18.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.19.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.20.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.20.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.20.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.20.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.20.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.21.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.21.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.21.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.22.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.22.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.22.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.23.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.24.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.24.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.24.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10.24.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lazybag = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + lbase64 = { + ['20070628-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['20100323-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120807-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120807-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120820-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lbc = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20070627-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20090529-1'] = { + { + arch = "rockspec" + } + }, + ['20100404-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120420-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120430-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20180729-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lbci = { + ['20090306-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130429-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150629-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lbuffer = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + lbuilder = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lcf = { + ['5.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lcmark = { + ['0.23.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.25.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.26.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.27.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.29.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.29.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.29.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.29.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.30.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lcolorize = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + lcomplex = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20091103-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20100404-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120430-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20180729-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lcrypt = { + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lcsv = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lcurses = { + ['6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['9.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ldecnumber = { + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ldoc = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.10-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.11-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.5-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.6-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.6-2'] = { + { + arch = "rockspec" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lecho = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + leda = { + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ledge = { + ['1.26-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.26.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.27.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.27.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.28-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['leetcode.nvim'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lefthook = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + leg = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + ['legendary.nvim'] = { + ['2.13.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.13.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.13.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.13.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.13.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lerror = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + leste = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + } + } + }, + lester = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lffetch = { + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + } + } + }, + lfsampler = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lfunctimer = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + lgdbm = { + ['20070628-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20100824-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20101030-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130702-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130702-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130702.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130702.52-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150420.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150421.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20211118.52-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lgetchar = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lgetopt = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lgi = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lgi-async-extra'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lglob = { + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lgmp = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lgsl = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + liba = { + ['0.1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['libcidr-ffi'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + libdeflate = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + libmagic = { + ['5.41-1'] = { + { + arch = "rockspec" + } + }, + ['5.41.1-1'] = { + { + arch = "rockspec" + } + }, + ['5.41.2-1'] = { + { + arch = "rockspec" + } + }, + ['5.41.3-1'] = { + { + arch = "rockspec" + } + } + }, + libmdbx = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.13-2'] = { + { + arch = "rockspec" + } + } + }, + libphonenumber = { + ['1.0-2'] = { + { + arch = "rockspec" + } + } + }, + libpq = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + libqrpng = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + } + }, + libsodium = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + libssh = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + libssh2 = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + libtls = { + ['2.5.4-1'] = { + { + arch = "rockspec" + } + }, + ['2.7.3-1'] = { + { + arch = "rockspec" + } + }, + ['2.7.3-2'] = { + { + arch = "rockspec" + } + }, + ['2.7.4-1'] = { + { + arch = "rockspec" + } + }, + ['2.7.4-2'] = { + { + arch = "rockspec" + } + }, + ['2.7.4-3'] = { + { + arch = "rockspec" + } + }, + ['3.4.1-2'] = { + { + arch = "rockspec" + } + }, + ['3.4.1-3'] = { + { + arch = "rockspec" + } + }, + ['3.5.2-1'] = { + { + arch = "rockspec" + } + } + }, + libzmanim = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "kindlepw2" + } + } + }, + ['lice-lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lift = { + ['0.1.0-4'] = { + { + arch = "rockspec" + } + } + }, + lifter_puller = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + light = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lightdrop = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lightningmdb = { + ['0.9-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.17.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.17.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.17.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.18.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.18.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.19.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.22.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lil = { + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + liluat = { + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + limath = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + linenoise = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['linenoise-windows'] = { + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lingy = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + lini = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['linked-list'] = { + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + linkedlist = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lint64 = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130805.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130805.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20180730-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + linterval = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120501-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120509-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20180729-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + liquid = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + list = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lit = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + litcord = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + literal = { + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['live-command.nvim'] = { + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lj2procfs = { + ['0.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + } + } + }, + ljack = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ljdns = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['2.4-0'] = { + { + arch = "rockspec" + } + } + }, + ljlinenoise = { + ['0.1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ljndpi = { + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ljsonschema = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ljsyscall = { + ['0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10-2'] = { + { + arch = "rockspec" + } + }, + ['0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + llhttp = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + llix = { + ['v0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + llscheck = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + llsocket = { + ['0.10.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.12.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.14.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.15.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.15.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.15.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.16.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + } + } + }, + llui = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + lluv = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.10-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lluv-curl'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lluv-ftp'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lluv-poll-zmq'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lluv-redis'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lluv-rs232'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lluv-ssl'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lmake = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + lmapm = { + ['20070628-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20090403-2'] = { + { + arch = "rockspec" + } + }, + ['20090403-3'] = { + { + arch = "rockspec" + } + }, + ['20100420-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120501-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120509-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lmathx = { + ['20080423-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20080903-1'] = { + { + arch = "rockspec" + } + }, + ['20090219-1'] = { + { + arch = "rockspec" + } + }, + ['20090808-1'] = { + { + arch = "rockspec" + } + }, + ['20100404-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120430-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120430.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120430.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20140620-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150505-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150624-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lmd5 = { + ['20130228-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130228-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lmpfr = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lmpfrlib = { + ['20170112-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20170112-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ln = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lnet = { + ['4.0-0'] = { + { + arch = "rockspec" + } + } + }, + lnodelist = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + lnotify = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loadchunk = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + } + }, + loadconf = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loader = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loadkit = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lobject = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + localexec = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lockbox = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + locky = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + lodash = { + ['0.02-0'] = { + { + arch = "rockspec" + } + } + }, + log = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['log-request-with-body'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['log.lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + log4l = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + log4lua = { + ['0.0.1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + logface = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loggedkv = { + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + } + } + }, + logger = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['logging.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + logit = { + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loglua = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loldb = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + long = { + ['2.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loop = { + ['2.2alpha-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.3beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loopcollections = { + ['1.0beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loopcomp = { + ['1.0beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loopdebugging = { + ['1.0beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loopobjects = { + ['1.0beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loopparsing = { + ['1.0beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loopserializing = { + ['1.0beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loowy = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lor = { + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + los = { + ['0.0.1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + } + }, + losc = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lotus = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lotus-api'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['love-imgui'] = { + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['love-ora'] = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['love-release'] = { + ['2.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.12-2'] = { + { + arch = "rockspec" + } + }, + ['2.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.13-2'] = { + { + arch = "rockspec" + } + }, + ['2.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['love2d.nvim'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lovebird = { + ['0.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loveconsole = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-2'] = { + { + arch = "rockspec" + } + } + }, + loverboy = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + loverocks = { + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lovetoys = { + ['0.2.0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lox = { + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lp = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpack = { + ['20070629-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + } + }, + lpatch = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + lpath = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpc = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpdf = { + ['20070717-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20070717-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130627.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130627.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130702.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130702.52-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpeg = { + ['0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['0.10-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['0.7-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpeg_patterns = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpeglabel = { + ['0.12.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.12.2-2'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.6.2-1'] = { + { + arch = "rockspec" + } + } + }, + lpegrex = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpm = { + ['0.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.0-3'] = { + { + arch = "rockspec" + } + }, + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + } + }, + lposix = { + ['20031107-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpresence = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpty = { + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lpugl = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + } + }, + lpugl_cairo = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + } + }, + lpugl_opengl = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + } + }, + lq = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lqd = { + ['20120420-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120430-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lqmath = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lrand = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lrandom = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20070628-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['20090623-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20101118-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120430.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120430.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20180729-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lrbtree = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lrc = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lrdb = { + ['0.1.7-2'] = { + { + arch = "rockspec" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + } + }, + lredux = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lrexlib-gnu'] = { + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lrexlib-oniguruma'] = { + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lrexlib-pcre'] = { + ['2.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lrexlib-pcre2'] = { + ['2.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lrexlib-posix'] = { + ['2.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lrexlib-tre'] = { + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lrexrepl = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + } + }, + lrt = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + } + } + }, + lrtaudio = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + lrtmidi = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + lrunkit = { + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lsh = { + ['0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lsha2 = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + lsleep = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lsm = { + ['0.4-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lsnes-timer'] = { + ['v0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lsocket = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lson = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lsp-progress.nvim'] = { + ['1.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lsp_signature.nvim'] = { + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lspec = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + lsqlcipher = { + ['0.9.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lsqlite3 = { + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.9.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.9.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.6-1'] = { + { + arch = "rockspec" + } + } + }, + lsqlite3complete = { + ['0.9.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.6-1'] = { + { + arch = "rockspec" + } + } + }, + ltcltk = { + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ltdiff = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ltermbox = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ltest = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ltext = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ltl = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + } + }, + ltreesitter = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ltui = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-1'] = { + { + arch = "rockspec" + } + }, + ['2.7-1'] = { + { + arch = "rockspec" + } + }, + ['2.8-1'] = { + { + arch = "rockspec" + } + } + }, + ltype = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ltypekit = { + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ltypekit-parser'] = { + ['7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-acme'] = { + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-aho-corasick'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-amf3'] = { + ['2.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-amqp'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-amqp-client'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-anki-connect'] = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-api-gateway-aws'] = { + ['1.7.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-api-gateway-cachemanager'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-api-gateway-hmac'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-aplicado'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-apr'] = { + ['0.18-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.18-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-arangodb'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-argparse'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-askpass'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-avro'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-basex'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-bcrypt'] = { + ['0.01-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-ber'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-bitcask'] = { + ['0.1.20210907-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.20210912-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.20210917-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.20210928-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-boolexpr'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-brotli'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-bsdiff'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-buffet'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-busmt-if'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-bz2'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-c3class'] = { + ['0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-capnproto'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-captcha'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-casclib'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-cassandra'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-0'] = { + { + arch = "rockspec" + } + }, + ['dev-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-cb0r'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-cbor'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-cc'] = { + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-chan'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-channels'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-chartplot'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-circuit-breaker'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-cjson'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-cjson-219'] = { + ['2.1.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-cjson-ol'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-cjson2'] = { + ['2.1devel-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-class'] = { + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-cli'] = { + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-click'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-cmsgpack'] = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-cn-cbor'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-coat'] = { + ['0.9.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-coatpersistent-lsqlite3'] = { + ['0.2.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-coatpersistent-luasql'] = { + ['0.2.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-codegen'] = { + ['0.3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-color'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-colorlog'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-conciseserialization'] = { + ['0.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-conciseserialization-lua53'] = { + ['0.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-covid-data'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-crontab'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-crypt'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-csnappy'] = { + ['0.1.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-csv'] = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-curl'] = { + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-custom-test'] = { + ['0.0-51'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-dancing-links'] = { + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-dataclass'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-db'] = { + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ddlt'] = { + ['2.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-3'] = { + { + arch = "rockspec" + } + }, + ['2.4-0'] = { + { + arch = "rockspec" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + } + }, + ['2.5-0'] = { + { + arch = "rockspec" + } + }, + ['2.6-0'] = { + { + arch = "rockspec" + } + }, + ['2.7-0'] = { + { + arch = "rockspec" + } + }, + ['2.8-0'] = { + { + arch = "rockspec" + } + }, + ['2.8-1'] = { + { + arch = "rockspec" + } + }, + ['2.8-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-de'] = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-deresute'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-di'] = { + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-discount'] = { + ['1.2.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.10.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-docx'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-dog'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-dynamic-cors'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-easy-crypto'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-em'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-emoji'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-epoll'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-erento-hmac'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-erento-uuid'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-errhandler'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-espeak'] = { + ['1.36r1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ev'] = { + ['v1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.4-1'] = { + { + arch = "rockspec" + } + }, + ['v1.5-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-evdev'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-event-dispatcher'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-express'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-express-middlewares'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-exprtk'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-extended'] = { + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ezlib'] = { + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-fann'] = { + ['0.4-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-fastlz'] = { + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-fastutils'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ffi-libinjection'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ffi-zlib'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-filesize'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-fiware-lib'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-floyd-sampling'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-fort'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-fs-module'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-gainer-lib'] = { + ['1.1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-gd'] = { + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-geoip'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-getch'] = { + ['0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-gl'] = { + ['1.15.05.99-01'] = { + { + arch = "rockspec" + } + } + }, + ['lua-glob-pattern'] = { + ['0.2.1.20120406-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-globals'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-gltf'] = { + ['1.0.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-gmod-lib'] = { + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-gnuplot'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-h3'] = { + ['4.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['4.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-hangul'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-hashings-and-nums'] = { + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-help'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-hiredis'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-hiredis-5.2-all-fixed'] = { + ['0.2.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-hiredis-cluster'] = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-hiredis-with-5.2-fix'] = { + ['0.2.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-http-parser'] = { + ['2.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-http2tcp'] = { + ['0.0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-i18n'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-iconv'] = { + ['6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['r3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['r5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['r5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-igt'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-imlib2'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-import'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-industrial-logger'] = { + ['1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-ini'] = { + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-inih'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-input'] = { + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-irc'] = { + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-jconv'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-jet'] = { + ['v0.10-1'] = { + { + arch = "rockspec" + } + }, + ['v0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-jq'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-json'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-jsonpatch'] = { + ['0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-jwc'] = { + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-jwk2pem'] = { + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-l10n'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-lace'] = { + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-lander'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-laxjson'] = { + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-lcdproc'] = { + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.8-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-leveldb'] = { + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-lhtmlr'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-libmodbus'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-linear'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-livr'] = { + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-livr-extra'] = { + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ljson'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-llthreads'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-llthreads2'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-llthreads2-compat'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-log'] = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-log-r'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-logger'] = { + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-long-polling'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-louis'] = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-lru'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-lsp'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-lsw'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-lswcli'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-lz4'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-lzma'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-m6502'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-markdown-extra'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-marshal'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['v1.0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-mastodon'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-maxminddb'] = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mbedtls'] = { + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mc'] = { + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mcrypt'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-messagepack'] = { + ['0.5.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-messagepack-lua53'] = { + ['0.5.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mikrotik'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-minittp'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mnemonic'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mock'] = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mongo'] = { + ['1.2.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mongo-bson'] = { + ['1.2.3-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-mosquitto'] = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mosquitto-v5'] = { + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mqtt'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mtrace'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-mud'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-multipart-parser'] = { + ['0.1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-multipart-post'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-myallocator'] = { + ['0.02-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-nanoid'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-netudpif'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-newrelic-integration'] = { + ['0.01-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.01-5'] = { + { + arch = "rockspec" + } + }, + ['0.01-6'] = { + { + arch = "rockspec" + } + }, + ['0.01-7'] = { + { + arch = "rockspec" + } + } + }, + ['lua-nginx-logging'] = { + ['v1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-nng'] = { + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-nowplaying'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-nucleo'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-nuspell'] = { + ['0.1alpha-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2alpha-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3alpha-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4alpha-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5alpha-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-oast'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-obfuscator.nvim'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-object'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-ocrspace'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-octave'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-openai'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-opencage-geocoder'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-option'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-package'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-parser'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-path'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-payssion'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-periphery'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-pg-dmo'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-pie'] = { + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-promise'] = { + ['0.1-3'] = { + { + arch = "rockspec" + } + } + }, + ['lua-protobuf'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-protobuf-etcd'] = { + ['0.3.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-quickcheck'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-randombytes'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-rbtree'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-readline'] = { + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-recaptcha'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-rectangle'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-reql'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-3'] = { + { + arch = "rockspec" + } + }, + ['0.6-4'] = { + { + arch = "rockspec" + } + }, + ['0.6-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-6'] = { + { + arch = "rockspec" + } + }, + ['0.6-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-requests'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-requests-async'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resp'] = { + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-acme'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-agoradynamickey'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-aries'] = { + ['release-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-auto-ssl'] = { + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-auto-ssl-20200912'] = { + ['0.14.4-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-auto-ssl-de'] = { + ['0.11.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-auto-ssl-instrumented'] = { + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-auto-ssl-multiname'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-aws'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-aws-auth'] = { + ['0.01-0'] = { + { + arch = "rockspec" + } + }, + ['0.11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-aws-email'] = { + ['0.01-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-aws-sdk'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-azure'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-balancer'] = { + ['0.02rc5-0'] = { + { + arch = "rockspec" + } + }, + ['0.04-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-beanstalkd'] = { + ['0.0-5'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-busted'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-busted2'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.4-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-casbin'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-casbin-adapter'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-certificate-sso'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-checkups'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-configure'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-console'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-consul'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-consul-0.3.2'] = { + ['0.3-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-consul-event'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-cookie'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-core'] = { + ['0.1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.17-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.17-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.17-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-cors'] = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-couchbase'] = { + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-couchdb'] = { + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-counter'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-crypto'] = { + ['master-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-ctxdump'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-dns'] = { + ['0.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-dns-client'] = { + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-dogstatsd'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-dogstatsd-jb'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-duo-mobile'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-env'] = { + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-etcd'] = { + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.9-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.10.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.4.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.4.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.4.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.4.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.5.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.5.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.5.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-exec'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-execvp'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-expr'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-fastutils'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-feishu-auth'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-fernet'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-ffi'] = { + ['main-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-ffi-python'] = { + ['main-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-fileinfo'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-fluent-logger'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-fluentd'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-ga'] = { + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-gaze'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-gcp'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-github'] = { + ['v1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-global-throttle'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-grpc-gateway'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-hashids'] = { + ['1.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-healthcheck'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-healthcheck-alins'] = { + ['3.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['3.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-healthcheck-api7'] = { + ['2.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-healthcheck-iresty'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-healthcheck-snz1'] = { + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-hipchat'] = { + ['v1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-hmac'] = { + ['v1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-hmac-ffi'] = { + ['0.05-0'] = { + { + arch = "rockspec" + } + }, + ['0.06-0'] = { + { + arch = "rockspec" + } + }, + ['0.06-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-hoedown'] = { + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-hs'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-hs-no-build'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-http'] = { + ['0.06-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.07-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.08-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.09-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.0.beta.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-http2'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-httpipe'] = { + ['0.05-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-influx'] = { + ['0.2.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-influx-mufanh'] = { + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-influx-statistics'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-7'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-info'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-injection'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-ipmatcher'] = { + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.6.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-iputils'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-iyo-auth'] = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-jit-uuid'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-jq'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-jsonrpc-batch'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-jwt'] = { + ['0.1.10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-jwt-48606'] = { + ['0.1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-kafka'] = { + ['0.06-0'] = { + { + arch = "rockspec" + } + }, + ['0.07-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.08-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.09-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.22-0'] = { + { + arch = "rockspec" + } + }, + ['0.23-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-keycloak'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-latch'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-ldap'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-libcjson'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-libr3'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.9-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-limit-rate'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-ljsonschema'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-ljusb'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-lock'] = { + ['0.07-0'] = { + { + arch = "rockspec" + } + }, + ['0.08-0'] = { + { + arch = "rockspec" + } + }, + ['0.08-1'] = { + { + arch = "rockspec" + } + }, + ['0.09-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-logger-socket'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-lrucache'] = { + ['0.09-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.09-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-luasocket'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-macaroons'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-mail'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-maxminddb'] = { + ['1.3.3-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-maxminddb-multi'] = { + ['1.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-mediador'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-memcached'] = { + ['0.13-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-mlcache'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.7.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-mock'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-moesif'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-motan'] = { + ['0.1.5-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-mpd'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-multiplexer'] = { + ['0.02-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-murmurhash2'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-murmurhash3'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-mutex'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-mysql'] = { + ['0.15-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-nanoid'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-nats'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-nettle'] = { + ['0.100-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.101-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.102-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.103-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.104-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.105-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.95-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.96-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.97-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.98-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.99-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-nghttp2'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-nghttp2-asio'] = { + ['1.2.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-ngxvar'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.2-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-ntlm'] = { + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-oakrouting'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-oauth-proxy'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-openidc'] = { + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.6-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-openssl'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0rc0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.10-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.24-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-passwdqc'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-paypal'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-perf'] = { + ['1.0.0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-phantom-token'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-postgres'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-postgres-client'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-prettycjson'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-prometheus'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-pubsub'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-pushover'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-qless'] = { + ['0.07-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.08-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-queue'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-r3'] = { + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-rabbitmqstomp'] = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-radixtree'] = { + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.9-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + } + }, + ['1.8-0'] = { + { + arch = "rockspec" + } + }, + ['1.9-0'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + } + }, + ['2.3-0'] = { + { + arch = "rockspec" + } + }, + ['2.4-0'] = { + { + arch = "rockspec" + } + }, + ['2.5-0'] = { + { + arch = "rockspec" + } + }, + ['2.6-0'] = { + { + arch = "rockspec" + } + }, + ['2.6.1-0'] = { + { + arch = "rockspec" + } + }, + ['2.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.7.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.8.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.8.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-readurl'] = { + ['v1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-redis'] = { + ['0.26-0'] = { + { + arch = "rockspec" + } + }, + ['0.27-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-redis-client'] = { + ['0.2.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-redis-cluster'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-redis-connector'] = { + ['0.02-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.03-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.04-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.05-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.06-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.07-0'] = { + { + arch = "rockspec" + } + }, + ['0.07-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.08-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.09-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-redis-util'] = { + ['0.07-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-repl'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-reqargs'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-requests'] = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-resolver'] = { + ['0.05-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-rocketmq'] = { + ['0.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-rollbar'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-rsa'] = { + ['0.04-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-rsa-placeholder'] = { + ['0.05-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-s3'] = { + ['v1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-saml'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-scrypt'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-session'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.24-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0.beta.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0.beta.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0.beta.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-session-zhulx'] = { + ['2.24-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-shcache'] = { + ['0.01-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-shell'] = { + ['0.03-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-signal'] = { + ['0.02-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-snappy'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-sniproxy'] = { + ['0.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-socket'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-sse'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-statsd'] = { + ['3.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-string'] = { + ['0.09-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-struct'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-t1k'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-t1k-main'] = { + ['0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-tags'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-tarpit'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-tasker'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-template'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-test'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-thread'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.6.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.6.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.6.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.6.4-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-timer'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-timer-ng'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-tsort'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-txid'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-uh'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-upload'] = { + ['0.09-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-upstream'] = { + ['0.08-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-upstream-healthcheck-tls'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-upstream-worker'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-urandom'] = { + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-url'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-uuid'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-validation'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-vardump'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-waf'] = { + ['0.10.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-weauth'] = { + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-websocket'] = { + ['0.07-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-websocket-kong'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-websocket-proxy'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-whitelist'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-wirefilter'] = { + ['v1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-resty-woothee'] = { + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-worker-events'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-xxhash'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-resty-xxhash-encode'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-rocks-app-project'] = { + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-rotas'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-rote'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-rover'] = { + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-rtmidi'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-rtoml'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ryaml'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-s7iso'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-salt'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-schema-validation'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-sdl2'] = { + ['2.0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.5.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-secureunionid'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-semver'] = { + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-series'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-shepi'] = { + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-shmem'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-silva'] = { + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-simdjson'] = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-simplelog'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-smtps'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-sort'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-spore'] = { + ['0.3.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-sqlite3'] = { + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ssllabs'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-status'] = { + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-step'] = { + ['v1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-stormlib'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-string'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-string-template'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-string-test'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-struct'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-suncalc'] = { + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-switch'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-syntect'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-table-to-literal'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-telegram-api'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-template'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-term'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-test'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-testassertion'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-testclass'] = { + ['0.01-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-testlongstring'] = { + ['0.2.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-testmore'] = { + ['0.3.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-timeago'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-tinycdb'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-tinyyaml'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-tk'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-toml'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-tree-sitter'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ttyrant'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-twilio'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-twitter'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-typeof'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lua-tz'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-ubjson'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-ucl'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-udev'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-uri'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-utility'] = { + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-utils'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-utils.nvim'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-value-browser'] = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-vcard'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-vips'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-vosk'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + } + }, + ['1.3-3'] = { + { + arch = "rockspec" + } + }, + ['1.3-4'] = { + { + arch = "rockspec" + } + }, + ['1.3-5'] = { + { + arch = "rockspec" + } + } + }, + ['lua-websockets'] = { + ['v1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v2.1-1'] = { + { + arch = "rockspec" + } + }, + ['v2.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lua-webview'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.4-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-wolfram'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-xlib'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-xlsxwriter'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-xmlreader'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-xwiimote'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-xxtea'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-yajl'] = { + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-yaml'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-yottadb'] = { + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-zabbix-sender'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-zip'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-zlib'] = { + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + } + } + }, + ['lua-zmq'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-zmq-threads'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua-zstd'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lua2json = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lua5.1.js-file-packer'] = { + ['0.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lua_bufflib = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lua_cliargs = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.rc-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lua_code_formatter = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + lua_fun = { + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-3'] = { + { + arch = "rockspec" + } + }, + ['0.4.0'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-0'] = { + { + arch = "rockspec" + } + } + }, + lua_ip = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + lua_json = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lua_ldap = { + ['1.0.2-0'] = { + { + arch = "rockspec" + } + } + }, + lua_pack = { + ['1.0.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lua_pack_cn = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + lua_redis = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + lua_resty_netacea = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lua_signal = { + ['1.000-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lua_sysenv = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + lua_system_constants = { + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lua_table = { + ['0.4'] = { + { + arch = "rockspec" + } + }, + ['0.4.1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2'] = { + { + arch = "rockspec" + } + }, + ['0.4.3-0'] = { + { + arch = "rockspec" + } + } + }, + lua_to_html = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + lua_uuid = { + ['0.1-8'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + } + } + }, + luabase64 = { + ['0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luabatteries = { + ['0.1'] = { + { + arch = "rockspec" + } + } + }, + luabc = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luabcd = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luabenchmark = { + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luabibtex = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + } + } + }, + luabidi = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luabins = { + ['0.1.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luabitop = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-3'] = { + { + arch = "rockspec" + } + } + }, + ['luabitop-53plus'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luabox = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacasc = { + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacc = { + ['0.9-0'] = { + { + arch = "rockspec" + } + }, + ['0.9-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-4'] = { + { + arch = "rockspec" + } + }, + ['0.9-5'] = { + { + arch = "rockspec" + } + } + }, + luacheck = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.18.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.21.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.21.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.21.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.22.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.22.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.25.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.26.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.26.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luacheck-formatter-sonar'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luacheck-formatter-sonarqube'] = { + ['0.3.1-1'] = { + { + arch = "rockspec" + } + } + }, + luachild = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + luacio = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaclass = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaclasses = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + luacoap = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacom = { + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + } + }, + luacom_x86 = { + ['dev.unknown-1'] = { + { + arch = "rockspec" + } + }, + ['dev.unknown-2'] = { + { + arch = "rockspec" + } + } + }, + luaconfig = { + ['0.1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacov = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luacov-cobertura'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luacov-console'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luacov-coveralls'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luacov-html'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luacov-multiple'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + } + }, + ['luacov-reporter-gcovr'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luacov-reporter-lcov'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + ['luacov-summary'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacrc16 = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + luacrypto = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0.20120524-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luacrypto-baikal'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacrypto2 = { + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacryptor = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + luacs = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacsound = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + luactx = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacurl = { + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacv = { + ['0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luacwrap = { + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + } + } + }, + luadaemon = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luadash = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luadate = { + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luadbc = { + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luadbd = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + } + }, + luadbg = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + luadbi = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luadbi-mysql'] = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luadbi-postgresql'] = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luadbi-sqlite3'] = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luadeepcl = { + ['5.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luademorock = { + ['v1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luadist-hello'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luadist2 = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + } + }, + luadns = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luadoc = { + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + luadocumentor = { + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaec25519 = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaejdb = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + } + } + }, + luaepnf = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaevent = { + ['0.4.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaex = { + ['0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaexif = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaexpat = { + ['1.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafam = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafan = { + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafanlite = { + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafanmicro = { + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafcgi = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luaffi-tkl'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafft = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + } + }, + luafileno = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafilesystem = { + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.5.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luafilesystem-ffi'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + luaflac = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaflock = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaflow = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafn = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafontmanager = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafp = { + ['1.5-19'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-20'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafruits = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luafudge = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + luagcrypt = { + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + luagearman = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luagl = { + ['1.01-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luagq = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luagraph = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luagraphs = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luahaml = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaharfbuzz = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luahelp = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luahtml = { + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + luahue = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luai = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaidl = { + ['0.8.9beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + luainlua = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + luaipc = { + ['c7b814e-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaipfs = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaircclient = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luaish-windows'] = { + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaiter = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-ahk'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-brotli'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-curl'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-dmon'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-ffi-loader'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['luajit-geoip'] = { + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-gumbo'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['luajit-mail'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-rsync'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-tidy'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-woothee'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-xxhash'] = { + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajit-zstd'] = { + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luajls = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-6'] = { + { + arch = "rockspec" + } + }, + ['0.7-3'] = { + { + arch = "rockspec" + } + } + }, + ['luajls-lfs'] = { + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['luajls-luv'] = { + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + luajson = { + ['0.10-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luajudo = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luajwt = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luajwtabcpen = { + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luajwtjitsi = { + ['1.3-5'] = { + { + arch = "rockspec" + } + }, + ['1.3-6'] = { + { + arch = "rockspec" + } + }, + ['1.3-7'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luajwtjitsi-petergood'] = { + ['1.3-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luajwtossl = { + ['1.3-7'] = { + { + arch = "rockspec" + } + } + }, + luakatsu = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luakiwis = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luakube = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0alpha-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luakuroshiro = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualame = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualand = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + lualdap = { + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4.rc1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualgorithms = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualibrarytemplate = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualibusb = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualife = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.4-1'] = { + { + arch = "rockspec" + } + } + }, + lualines = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualink = { + ['0.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualinq = { + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualit = { + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + lualog = { + ['0.1-3'] = { + { + arch = "rockspec" + } + } + }, + lualogging = { + ['1.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualol = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + } + } + }, + luals2dox = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualsx = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualua = { + ['scm-0'] = { + { + arch = "rockspec" + } + } + }, + lualvm = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lualzo = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luamacro = { + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.5.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luamagick = { + ['6.q16-1'] = { + { + arch = "rockspec" + } + } + }, + luamark = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luamidi = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luamine = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + luaminify = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luamon = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luamqtt = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.3-2'] = { + { + arch = "rockspec" + } + }, + ['1.4.3-3'] = { + { + arch = "rockspec" + } + }, + ['1.4.3-4'] = { + { + arch = "rockspec" + } + }, + ['1.4.5-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.6-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.1.0-2'] = { + { + arch = "rockspec" + } + }, + ['3.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.1.2-0'] = { + { + arch = "rockspec" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['3.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['3.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['3.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['3.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['3.4.2-2'] = { + { + arch = "rockspec" + } + }, + ['3.4.2-3'] = { + { + arch = "rockspec" + } + }, + ['3.4.2-4'] = { + { + arch = "rockspec" + } + }, + ['3.4.3-1'] = { + { + arch = "rockspec" + } + } + }, + luamqttc = { + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luamqttt = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luandarray = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luanet = { + ['1.1.2-0'] = { + { + arch = "rockspec" + } + } + }, + luanlp = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luanosql-unqlite'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + luanotify = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luanscol = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaobject = { + ['0.1.1-5'] = { + { + arch = "rockspec" + } + } + }, + luaocc = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + luaogg = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaohook = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaoop = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaopus = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaorm = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaossl = { + ['20141028-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150504-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150504-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150727-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20150727-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20151221-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20151221-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161029-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161101-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161208-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161209-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161214-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20170901-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20170903-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20171028-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20180530-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20180708-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20181102-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20181207-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20190612-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20190731-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20200709-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20220711-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luapak = { + ['0.1.0.beta2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0.beta3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0.beta4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0.beta5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luapdu = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + luapgsql = { + ['1.4.10-0'] = { + { + arch = "rockspec" + } + }, + ['1.4.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.6.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + } + } + }, + luaphonenumber = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + luapicohttpparser = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaplot = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + } + }, + luapod = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + luaposix = { + ['29-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['30-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['31-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['32-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['33.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['33.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['33.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['33.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['33.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['34.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['34.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['34.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['34.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['34.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['34.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['34.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['34.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['35.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['35.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['36.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['36.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['36.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['36.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.20-2'] = { + { + arch = "rockspec" + } + }, + ['5.1.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.24-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.28-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.7-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaprecomp = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luapreprocess = { + ['1.19.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.21.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luapress = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.2-0'] = { + { + arch = "rockspec" + } + }, + ['3.3-0'] = { + { + arch = "rockspec" + } + }, + ['3.3.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.4-0'] = { + { + arch = "rockspec" + } + }, + ['3.5-0'] = { + { + arch = "rockspec" + } + }, + ['3.5.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.5.2-0'] = { + { + arch = "rockspec" + } + }, + ['4.0-0'] = { + { + arch = "rockspec" + } + }, + ['4.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['4.1-0'] = { + { + arch = "rockspec" + } + }, + ['4.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['4.1.2-0'] = { + { + arch = "rockspec" + } + } + }, + luaproc = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaprofiler = { + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['2.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaprompt = { + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaproxy = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.4-1'] = { + { + arch = "rockspec" + } + } + }, + luapsql = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaqub = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + luarabbit = { + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaredis = { + ['2.0.5-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.5-2'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + luarepl = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-2'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + } + } + }, + luarequest = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + luarestructure = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luarestyredis = { + ['0.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luark = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + luarocks = { + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-builtin-with-command'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-cpp'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['luarocks-build-cyan'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-extended'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['luarocks-build-fennel'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-lr-hooks'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-lrocket'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-lrocket-next'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-rust'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-rust-binary'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-rust-mlua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-treesitter-parser'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-build-xmake'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-14'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-15'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-16'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-17'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-18'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-19'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-20'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-21'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-22'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-23'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-24'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-25'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-26'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-27'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-28'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-fetch-gitrec'] = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luarocks-tag-release'] = { + ['5.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.11.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.14.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.39-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.40-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.41-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.42-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.43-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.44-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.45-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.46-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.47-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.48-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.49-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.50-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luarocks_helloworld = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luarray = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luars232 = { + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luarunner = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luascope = { + ['0.01-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasec = { + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['0.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasec-fixed'] = { + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaselenium = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + luaseq = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaserial = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + luaserialization = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + luashell = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasnip = { + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasnmp = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + luasoap = { + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['4.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + luasock99 = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasocket = { + ['2.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['2.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['2.0.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-6'] = { + { + arch = "rockspec" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0rc1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0rc1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasocket-lanes'] = { + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasocket-unix'] = { + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasodium = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasofia = { + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasolidstate = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasql-exasol'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['luasql-firebird'] = { + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasql-mysql'] = { + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.5-1'] = { + { + arch = "rockspec" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasql-oci8'] = { + ['2.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasql-odbc'] = { + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasql-postgres'] = { + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['2.3.3-1'] = { + { + arch = "rockspec" + } + }, + ['2.3.4-1'] = { + { + arch = "rockspec" + } + }, + ['2.3.5-1'] = { + { + arch = "rockspec" + } + }, + ['2.3.5-2'] = { + { + arch = "rockspec" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasql-sqlite'] = { + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luasql-sqlite3'] = { + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.5-1'] = { + { + arch = "rockspec" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.6.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.6.1-3'] = { + { + arch = "rockspec" + } + } + }, + luasrcdiet = { + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luassert = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.10-0'] = { + { + arch = "rockspec" + } + }, + ['1.7.11-0'] = { + { + arch = "rockspec" + } + }, + ['1.7.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.7.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.7.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.7.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.6-0'] = { + { + arch = "rockspec" + } + }, + ['1.7.7-0'] = { + { + arch = "rockspec" + } + }, + ['1.7.8-0'] = { + { + arch = "rockspec" + } + }, + ['1.7.9-0'] = { + { + arch = "rockspec" + } + }, + ['1.8.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luastatic = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luastatsd = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luastepper = { + ['1.16.06.17-1'] = { + { + arch = "rockspec" + } + } + }, + luastrava = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + } + }, + luastream = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['@version@-1'] = { + { + arch = "rockspec" + } + } + }, + luastruct = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasvc = { + ['0.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasvn = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasyslog = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luasystem = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luatabledump = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + luatables = { + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luatbot = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + } + } + }, + luaterminal = { + ['1.16.06.16-1'] = { + { + arch = "rockspec" + } + }, + ['1.16.06.16-2'] = { + { + arch = "rockspec" + } + }, + ['1.16.06.16-3'] = { + { + arch = "rockspec" + } + }, + ['1.16.06.16-4'] = { + { + arch = "rockspec" + } + } + }, + luaterminalremote = { + ['1.14.09.10-1'] = { + { + arch = "rockspec" + } + } + }, + luatest = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luatext = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luatexts = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luatools = { + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luatoteal = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luatraverse = { + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luatweetnacl = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + } + }, + luatwit = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luatypechecks = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.4-1'] = { + { + arch = "rockspec" + } + } + }, + luatz = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaucdn = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaunbound = { + ['0-1'] = { + { + arch = "rockspec" + } + }, + ['0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaunit = { + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4-1'] = { + { + arch = "rockspec" + } + } + }, + luaunix = { + ['1.2.7-0'] = { + { + arch = "rockspec" + } + } + }, + luautf8 = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luautils = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luavel = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-3'] = { + { + arch = "rockspec" + } + } + }, + luavenster = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + luawalker = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + luawav = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luawebsocket = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + luawinapi = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + luawt = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaxml = { + ['101012-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['101012-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['130610-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaxmlgenerator = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaxmlrpc = { + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaxpath = { + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaxpl = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luaxxhash = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luayaml = { + ['0.5.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luayue = { + ['0.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0.bin-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0.bin-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0.bin-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0.bin-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0.bin-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0.bin-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.1.bin-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.1.bin-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.1.bin-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.1.bin-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luazen = { + ['0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-2'] = { + { + arch = "rockspec" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + } + } + }, + luazip = { + ['1.2.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lub = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lubs = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luchia = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ludent = { + ['v0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lugate = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luggage = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luix = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lulpeg = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luma = { + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lumber = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-3'] = { + { + arch = "rockspec" + } + } + }, + lume = { + ['2.3.0-0'] = { + { + arch = "rockspec" + } + } + }, + lumen = { + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lummander = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + } + } + }, + luna = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + } + } + }, + lunadoc = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lunajson = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lunamark = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + } + }, + lunaquery = { + ['0.9-1'] = { + { + arch = "rockspec" + } + }, + ['0.9-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + lunar = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lunary = { + ['20101009-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['20121108-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20121212-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20181002-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lunary-core'] = { + ['20101009-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['20121108-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20121212-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20181002-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lunary-optim'] = { + ['20101009-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20121108-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20121212-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20181002-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lunatest = { + ['0.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luncheon = { + ['0.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lundler = { + ['dev-26'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lunescript = { + ['main-1'] = { + { + arch = "rockspec" + } + } + }, + lunescript51 = { + ['main-1'] = { + { + arch = "rockspec" + } + } + }, + lunit = { + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lunitx = { + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lunix = { + ['20150923-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161026-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161026-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20170511-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20170920-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20170920-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20220331-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luno = { + ['20121129-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130108-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20130304-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20141204-1'] = { + { + arch = "rockspec" + } + }, + ['20170303-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lupe = { + ['latest-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luq = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + } + }, + lure = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + luring = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lurror = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lusc = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lusc_luv = { + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luse = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lust = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lustache = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['lustache-lambdas'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lustaglue = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lustre = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lusty = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.7-2'] = { + { + arch = "rockspec" + } + }, + ['0.7-3'] = { + { + arch = "rockspec" + } + }, + ['0.7-4'] = { + { + arch = "rockspec" + } + }, + ['0.7-6'] = { + { + arch = "rockspec" + } + }, + ['0.7-7'] = { + { + arch = "rockspec" + } + }, + ['0.7-8'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-config'] = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-error-status'] = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-form'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-html'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lusty-json'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-log'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lusty-log-console'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lusty-mustache'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lusty-nginx'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-request-file'] = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lusty-request-pattern'] = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-rewrite-param'] = { + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-statsd'] = { + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lusty-store'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-store-mongo'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.10-0'] = { + { + arch = "rockspec" + } + }, + ['0.11-0'] = { + { + arch = "rockspec" + } + }, + ['0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.11-2'] = { + { + arch = "rockspec" + } + }, + ['0.12-0'] = { + { + arch = "rockspec" + } + }, + ['0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.12-2'] = { + { + arch = "rockspec" + } + }, + ['0.13-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.9-0'] = { + { + arch = "rockspec" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-store-mysql'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + } + }, + ['0.4-3'] = { + { + arch = "rockspec" + } + }, + ['0.4-4'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + } + }, + ['lusty-template'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lut = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lutf8proc = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lutrace = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luuid = { + ['20070925-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20090429-1'] = { + { + arch = "rockspec" + } + }, + ['20100303-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20101118-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120501-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120501-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120509-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20120509-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luv = { + ['1.22.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.22.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.25.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.26.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.27.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.28.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.28.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.29.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.29.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.29.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.29.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.30.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.30.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.30.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.32.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.36.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.2-2'] = { + { + arch = "rockspec" + } + }, + ['1.40.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.41.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.41.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.42.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.42.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.43.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.45.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.47.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.48.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.48.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.6.1-2'] = { + { + arch = "rockspec" + } + }, + ['1.7.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.4-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.48.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['luv-updated'] = { + ['1.9.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lux = { + ['0.2.1-1'] = { + { + arch = "rockspec" + } + } + }, + luxure = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + luxure_static = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lxsh = { + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lyaml = { + ['1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lyretemplates = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['lz.n'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lzfse = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + lzlib = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1.53-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1.53-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1.53-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1.53-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.work3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lzmq = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lzmq-auth'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lzmq-ffi'] = { + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lzmq-pool'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lzmq-timer'] = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lzmq-zmq'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['lzq-kong-oidc'] = { + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + lzt = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-0'] = { + { + arch = "rockspec" + } + } + }, + lzw = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['m3u-parser'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mach = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.0-0'] = { + { + arch = "rockspec" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + } + }, + ['4.0-0'] = { + { + arch = "rockspec" + } + }, + ['4.1-0'] = { + { + arch = "rockspec" + } + }, + ['4.2-0'] = { + { + arch = "rockspec" + } + }, + ['4.3-0'] = { + { + arch = "rockspec" + } + }, + ['4.4-0'] = { + { + arch = "rockspec" + } + }, + ['4.4-1'] = { + { + arch = "rockspec" + } + }, + ['4.5-0'] = { + { + arch = "rockspec" + } + }, + ['4.6-0'] = { + { + arch = "rockspec" + } + }, + ['4.7-0'] = { + { + arch = "rockspec" + } + }, + ['4.8-0'] = { + { + arch = "rockspec" + } + }, + ['5.0-0'] = { + { + arch = "rockspec" + } + }, + ['5.1-0'] = { + { + arch = "rockspec" + } + } + }, + magic = { + ['5.25-1'] = { + { + arch = "rockspec" + } + } + }, + ['magic-apigw'] = { + ['magic-0'] = { + { + arch = "rockspec" + } + }, + ['master-0'] = { + { + arch = "rockspec" + } + } + }, + magick = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['magick-least'] = { + ['1.5.0-2'] = { + { + arch = "rockspec" + } + } + }, + mailgun = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + malvado = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + many2one = { + ['1.14.09.19-1'] = { + { + arch = "rockspec" + } + }, + ['1.14.11.12-1'] = { + { + arch = "rockspec" + } + }, + ['1.14.11.12-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.11.12-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.11.12-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.20.08.23-1'] = { + { + arch = "rockspec" + } + }, + ['1.21.08.13-1'] = { + { + arch = "rockspec" + } + } + }, + map = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mapx.nvim'] = { + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + marcusluatest = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mare = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + markdown = { + ['0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.30-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.31-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.32-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.32-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.33-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['markdown.sile'] = { + ['1.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + markov = { + ['v1.0-1'] = { + { + arch = "rockspec" + } + }, + ['v1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['markov-text'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mason-lspconfig.nvim'] = { + ['1.26.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.27.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.28.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.29.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mason-nvim-dap.nvim'] = { + ['2.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mason.nvim'] = { + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + matcher_combinators = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + matchext = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['math-evol'] = { + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.12-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['math-rungekutta'] = { + ['1.07-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.07-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.08-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['math-walshtransform'] = { + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mathparser = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + md = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + md2html = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + md5 = { + ['1.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + } + }, + mecab = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + media_player = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mediator_lua = { + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + } + } + }, + mediatypes = { + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + megaqueue = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['meisocafe.hammerspoon.dkb'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + melipayamak = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + memlimit = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + memo = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + memoize = { + ['2.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + memory = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + memreader = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + mendudu = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + } + }, + metaclass = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + metalua = { + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['metalua-compiler'] = { + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['metalua-parser'] = { + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + metamodule = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + } + }, + metaty = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mexbt = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + mfr = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + microlight = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + microscope = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + microsoftsapi = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + middleclass = { + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-0'] = { + { + arch = "rockspec" + } + }, + ['3.2-0'] = { + { + arch = "rockspec" + } + }, + ['4.0-0'] = { + { + arch = "rockspec" + } + }, + ['4.1-0'] = { + { + arch = "rockspec" + } + }, + ['4.1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['middleclass-mixin-singleton'] = { + ['0.01-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + middleman = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + middleware = { + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['1.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + midi = { + ['4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['4.2-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.4-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['5.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + midialsa = { + ['1.00-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.02-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.03-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.04-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.06-0'] = { + { + arch = "rockspec" + } + }, + ['1.09-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.21-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.22-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.23-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.24-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.25-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + millheat = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + milua = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + } + }, + mimetypes = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + minctest = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + minheap = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['mini.ai'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.align'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.animate'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.base16'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.basics'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.bracketed'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.bufremove'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.clue'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.colors'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.comment'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.completion'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.cursorword'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.deps'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.diff'] = { + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.doc'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.extra'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.files'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.fuzzy'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.hipatterns'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.hues'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.indentscope'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.jump'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.jump2d'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.map'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.misc'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.move'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.notify'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.nvim'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.operators'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.pairs'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.pick'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.sessions'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.splitjoin'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.starter'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.statusline'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.surround'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.tabline'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.test'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.trailspace'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mini.visits'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + miniblooms = { + ['0.5-1'] = { + { + arch = "rockspec" + } + } + }, + minicurses = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + miniflac = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + minifs = { + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mirrorfs = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['missinglink-sdk'] = { + ['0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.24-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.29-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.31-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.32-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.33-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.34-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.35-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.36-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.37-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.38-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.39-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.40-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.41-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.42-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.43-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.44-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.45-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.52-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.53-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.54-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mixlua = { + ['0.2.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mjolnir.7bits.mjomatic'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['mjolnir._asm'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.applistener'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.compat_51'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.data'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.data.base64'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.data.json'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.data.pasteboard'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.eventtap'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.eventtap.event'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.hydra'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.hydra.applescript'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.hydra.dockicon'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.hydra.undocumented'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.ipc'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.ipc.cli'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.modal_hotkey'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.modules'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.notify'] = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.pathwatcher'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.settings'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.sys.audiodevice'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.sys.battery'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.sys.brightness'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.sys.mouse'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.timer'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.ui.notification'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.ui.sound'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.undocumented.bluetooth'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.undocumented.cgsdebug'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.undocumented.coredock'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.utf8_53'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.watcher.battery'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir._asm.watcher.screen'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + }, { + arch = "src" + } + } + }, + ['mjolnir.alert'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + } + }, + ['mjolnir.application'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + } + }, + ['mjolnir.bg.grid'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['mjolnir.chdiza.slateops'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['mjolnir.cmsj.appfinder'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['mjolnir.cmsj.caffeinate'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + } + }, + ['mjolnir.fnutils'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['mjolnir.geometry'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + } + }, + ['mjolnir.grille'] = { + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mjolnir.hotkey'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + } + }, + ['mjolnir.jstevenson.cursor'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + } + }, + ['mjolnir.keycodes'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + } + }, + ['mjolnir.lb.itunes'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['mjolnir.lb.spotify'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['mjolnir.lx.lockscreen'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['mjolnir.pvertenten.cycle'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['mjolnir.screen'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + } + }, + ['mjolnir.sd.grid'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['mjolnir.sk.transform'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + } + }, + ['mjolnir.th.hints'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86_64" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mjolnir.tiling'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['mjolnir.winter'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mkdir = { + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + } + }, + mkdirp = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mkdnflow.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mkdtemp = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + mkstemp = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + mlua = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mm = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mmapfile = { + ['1-1'] = { + { + arch = "rockspec" + } + }, + ['2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mmdblua = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + mnet = { + ['0.3.20210628-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.20210703-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.20220807-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.20230218-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.20230708-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mo = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mobdebug = { + ['0.48-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.49-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.50-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.51-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.55-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.63-1'] = { + { + arch = "rockspec" + } + }, + ['0.64-1'] = { + { + arch = "rockspec" + } + }, + ['0.70-1'] = { + { + arch = "rockspec" + } + }, + ['0.80-1'] = { + { + arch = "rockspec" + } + } + }, + mobile_detect = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mocka = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.9-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.4-1'] = { + { + arch = "rockspec" + } + } + }, + mockagne = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mockuna = { + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + } + }, + mod11 = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mod_lib_ldap = { + ['35-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mod_storage_ldap = { + ['7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + modern = { + ['0.1'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + modest = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + modjail = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + modsec = { + ['0.0.1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + } + } + }, + molde = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + molly = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mongo = { + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mongorover = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['moon-cache'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['moon-i18n'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['moon-redis'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['moon-watch'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moon_test = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + moonbox = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + moonbreaker = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moonbuild = { + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mooncake = { + ['0.0.3-20210613'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-20210619'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.20210627-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.20210829-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.20210922-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.20210925-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.20211114-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.20220116-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.20220501-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.20220703-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.20220801-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.20221006-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.20221112-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.20221204-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.20221204-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mooncrafts = { + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moonfltk = { + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moongarden = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moonglfw = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + moongrahams = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + mooni = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moonjson = { + ['0.1.2-1'] = { + { + arch = "rockspec" + } + } + }, + moonpick = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moonplus = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moonrocks = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moonscript = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.2.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moontastic = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moonxml = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.0.0-3'] = { + { + arch = "rockspec" + } + }, + ['3.1.0-3'] = { + { + arch = "rockspec" + } + }, + ['3.2.0-4'] = { + { + arch = "rockspec" + } + }, + ['3.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + moor = { + ['latest-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v4.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + morse = { + ['0.9.1-1'] = { + { + arch = "rockspec" + } + } + }, + moses = { + ['1.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['move.nvim'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mpack = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.11-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.12-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.8-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mpd = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + mpi = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mpv-netrc'] = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['mq-biggerlib'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + mqttudp = { + ['0.4-1'] = { + { + arch = "rockspec" + } + } + }, + ['mrcp-utils'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + mtint = { + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + } + } + }, + mtmsg = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + } + } + }, + mtstates = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + } + } + }, + muck = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + multi = { + ['1.8-2'] = { + { + arch = "rockspec" + } + }, + ['1.8-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['12.2-0'] = { + { + arch = "rockspec" + } + }, + ['12.2-1'] = { + { + arch = "rockspec" + } + }, + ['13.0-0'] = { + { + arch = "rockspec" + } + }, + ['13.1-0'] = { + { + arch = "rockspec" + } + }, + ['14.0-0'] = { + { + arch = "rockspec" + } + }, + ['14.1-0'] = { + { + arch = "rockspec" + } + }, + ['14.2-0'] = { + { + arch = "rockspec" + } + }, + ['14.3-0'] = { + { + arch = "rockspec" + } + }, + ['15.0-0'] = { + { + arch = "rockspec" + } + }, + ['15.1-0'] = { + { + arch = "rockspec" + } + }, + ['15.2-0'] = { + { + arch = "rockspec" + } + }, + ['15.2-1'] = { + { + arch = "rockspec" + } + }, + ['15.3-0'] = { + { + arch = "rockspec" + } + }, + ['15.3-1'] = { + { + arch = "rockspec" + } + }, + ['16.0-0'] = { + { + arch = "rockspec" + } + }, + ['16.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['multicursors.nvim'] = { + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + multikey = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + multimethod = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + multipart = { + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['multipart-formdata-lib'] = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['multipart-post'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + multirequests = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + multistreamer = { + ['11.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.3.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.5.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.5.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11.6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['12.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['12.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['12.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['12.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + multitone = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + munin = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + } + }, + murmurhash3 = { + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mwcrng = { + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['my-awesome-plugin.nvim'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + my_library = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + myauth = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.6-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.6-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.7-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mygateway = { + ['0.5-0'] = { + { + arch = "rockspec" + } + } + }, + mymodule = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + } + }, + myplugin = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + mysin = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nacl = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nacl-cli'] = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nana = { + ['0.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nancy = { + ['549-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nanoid = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + nanosleep = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + nanostores_lua = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + } + }, + nanovg = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + native = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nats = { + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['navigator.lua'] = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['navigator.nvim'] = { + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ncache = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nclassic = { + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['near-kong-kafka-log'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nef = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nekos-lua-cqueues'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['neo-tree.nvim'] = { + ['3.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['neoconf.nvim'] = { + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['neodev.nvim'] = { + ['2.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + neogen = { + ['2.17.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.17.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + neogit = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + neorg = { + ['0.0.2848-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['neorg-telescope'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['neoscroll.nvim'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + neotest = { + ['4.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['neotest-haskell'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nested = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nested-cli'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + net = { + ['0.22.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.22.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.23.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.24.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.25.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.28.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.31.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.33.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.34.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.34.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.34.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.36.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.37.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.38.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['net-http'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['net-url'] = { + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + netatmo = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + netcheck = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + netfoxpack = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + netlink = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + netstring = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.6-0'] = { + { + arch = "rockspec" + } + } + }, + newstate = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + nextfile = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nginx-lua-exporter'] = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nginx-lua-frequency'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nginx-lua-oauth2'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nginx-lua-prometheus'] = { + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-20170303'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-20170610'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20171117-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20171117-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20171117-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20181120-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20181120-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20181120-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20200420-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20200420-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20200523-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20201118-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20201218-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20210206-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20220127-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20220527-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20221218-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20230607-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20240525-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nginx-lua-prometheus-api7'] = { + ['0.20240201-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nginx-lua-waf'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nginx-metrix'] = { + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nginx-resumable-upload'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ngx_lua_datadog = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ngxjsonform = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ngxlogex = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nightfox.nvim'] = { + ['3.9.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nixio = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nlua = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nn = { + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + nnlr = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nnsparse = { + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['no-neck-pain.nvim'] = { + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nocurses = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['nodejs-path'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['nodemcu-logging'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nodemculuamocks = { + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['noice.nvim'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nokia-fork-lua-cassandra'] = { + ['1.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nokia-fork-lua-resty-dns-client'] = { + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nokia-fork-lua-resty-mysql'] = { + ['0.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nokia-fork-lua-resty-socket'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nomad-lua'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['norgopolis-client.lua'] = { + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['norgopolis-server.lua'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nosigpipe = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + notification = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + notifycenter = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + nozzle = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['npackages.nvim'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + npssdk = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + npy4th = { + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-3'] = { + { + arch = "rockspec" + } + } + }, + nsenter = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nui-components.nvim'] = { + ['1.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['nui.nvim'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + null = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + numextra = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + numlua = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-client'] = { + ['0.0.1-26'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-client-proxy'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-cmp'] = { + ['0.0.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['nvim-cokeline'] = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-dap'] = { + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-dap-ui'] = { + ['3.9.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-dbee'] = { + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-dev-container'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-java'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-java-core'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-java-dap'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-jdtls'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-jqx'] = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-lastplace'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-lightbulb'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-lspconfig'] = { + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-metals'] = { + ['0.8.x-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.x-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-nio'] = { + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-notify'] = { + ['3.13.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.13.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-parinfer'] = { + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-peekup'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-possession'] = { + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-scrollview'] = { + ['5.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-smuggler'] = { + ['main-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-snippy'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-surround'] = { + ['2.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-tree.lua'] = { + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-treesitter-legacy-api'] = { + ['0.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-ufo'] = { + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nvim-web-devicons'] = { + ['0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.100-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.99-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nvtx = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nwunsch = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['nx-kong-oidc'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['nxx-lua-resty-cookie'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + nysiis = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + oasvalidator = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + oauth = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['oauth-jwks-validator'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + } + }, + ['oauth-token-validate'] = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + oauth2 = { + ['1.16.06.15-1'] = { + { + arch = "rockspec" + } + }, + ['1.16.06.15-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16.06.15-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['oauth2-acl'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + oauth2c = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + oauth_light = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + obey = { + ['0.1.0-7'] = { + { + arch = "rockspec" + } + } + }, + ['objc.lua'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + objectlua = { + ['0.4.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['obsidian.nvim'] = { + ['3.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ocsg = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + octoflow = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + odbc = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['odbc-pool'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + odielak = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-3'] = { + { + arch = "rockspec" + } + } + }, + ohm = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + oil = { + ['0.4beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['oil.nvim'] = { + ['2.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['onedarkpro.nvim'] = { + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['onenord.nvim'] = { + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + onion2web = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + oo = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + oocairo = { + ['1.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + } + } + }, + oop = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + oops = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['op-sdk'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['open-tiny-util'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['openblas-conv'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + opencl = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + opencv_lua = { + ['4.10.0-1'] = { + { + arch = "rockspec" + } + }, + ['4.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.8.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.9.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['opencv_lua-contrib'] = { + ['4.10.0-1'] = { + { + arch = "rockspec" + } + } + }, + opendal = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + opendir = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + } + }, + opengl = { + ['1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + openrtm = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['openssh-hash'] = { + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + openssl = { + ['0.7.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['openssl-baikal'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + opentelemetry = { + ['0.2-3'] = { + { + arch = "rockspec" + } + } + }, + ['opentelemetry-lua'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + } + }, + ['0.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-5'] = { + { + arch = "rockspec" + } + }, + ['0.2-6'] = { + { + arch = "rockspec" + } + }, + ['master-0'] = { + { + arch = "rockspec" + } + } + }, + opentracing = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['opentracing-openresty'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['opeth-all'] = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['opeth-core'] = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['opeth-lasm'] = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['opeth-lvis'] = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['opeth-moonstep'] = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['opeth-opeth'] = { + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + optarg = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + optparse = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + orange = { + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + } + }, + orbit = { + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['2.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['2.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + orderedset = { + ['0.01-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.cbor'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.const.exit'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.const.gopher-types'] = { + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.dns'] = { + ['1.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.env'] = { + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.errno'] = { + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.iconv'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.abnf'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.ascii'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.ascii.char'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.ascii.control'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.ascii.ctrl'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.email'] = { + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.ini'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.ip'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.ip-text'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.iso'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.iso.char'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.iso.control'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.iso.ctrl'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.json'] = { + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.jsons'] = { + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.soundex'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.strftime'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.url'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.url.gopher'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.url.sip'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.url.siptel'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.url.tel'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.url.url'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.utf8'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.utf8.char'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.utf8.control'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.parsers.utf8.ctrl'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.syslog'] = { + ['1.0.5-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['2.1.2-0'] = { + { + arch = "rockspec" + } + }, + ['2.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.4-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.tls'] = { + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['org.conman.uuid'] = { + ['1.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + orgmode = { + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + orm = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['os-pipe'] = { + ['0.5.0-1'] = { + { + arch = "rockspec" + } + } + }, + osc = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + oscpack = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['osrm-lua-libs'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ossp-uuid'] = { + ['1.6.2-1'] = { + { + arch = "rockspec" + } + } + }, + otom = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['otouto-test'] = { + ['3.11-11'] = { + { + arch = "rockspec" + } + } + }, + otp = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['otter.nvim'] = { + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + outcome = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['overseer.nvim'] = { + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ovh-api'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + owoify = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['oxd-web-lua'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['oz.nvim'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['package-info.nvim'] = { + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + packer = { + ['0.1.20240307-1'] = { + { + arch = "rockspec" + } + } + }, + ['pai-serverless-kong'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + } + }, + pancake = { + ['1.0.0b11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0b16-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0b17-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0b5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0b7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pandocmeta = { + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + panlunatic = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + panpipe = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['paperplanes.nvim'] = { + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['papis.nvim'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['paq-nvim'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + parent = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + parsel = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['parser-gen'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + } + }, + paseto = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pash = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + passer = { + ['0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + patch = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + path = { + ['1.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + pathetic = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['pathlib.nvim'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pato = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + } + } + }, + patok = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + } + }, + payments = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pbc = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pcre2 = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + pdh = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['pe-parser'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-2'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pegasus = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['pegasus-mr'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.0-10'] = { + { + arch = "rockspec" + } + } + }, + pegdebug = { + ['0.40-1'] = { + { + arch = "rockspec" + } + }, + ['0.40-2'] = { + { + arch = "rockspec" + } + }, + ['0.41-1'] = { + { + arch = "rockspec" + } + } + }, + pegex = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pegl = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + penlight = { + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['0.9.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['penlight-ffi'] = { + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + ['percent-encode-encoder'] = { + ['0.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + } + } + }, + ['percent-f-strings'] = { + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + } + } + }, + perihelion = { + ['0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['perimeterx-nginx-plugin'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.10-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.11-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.12-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.13-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.3.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.4.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.5.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['persistence.nvim'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + personnummer = { + ['3.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pesterkit = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + petrisport = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + petrodoc = { + ['10.12.28-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pgmoon = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['pgmoon-mashape'] = { + ['1.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + pgvector = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + phpass = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + physfs = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['pico8-to-lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + } + } + }, + picohttpparser = { + ['1.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.3-2'] = { + { + arch = "rockspec" + } + } + }, + pidmap = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['piecharts.sile'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['pijaz sdk'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['pijaz-sdk'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + } + }, + ['pilcrow.unito'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pilosa = { + ['0.1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pimp = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.5-2'] = { + { + arch = "rockspec" + } + }, + ['1.5-4'] = { + { + arch = "rockspec" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + } + } + }, + pipe = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pixcrypt = { + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + } + } + }, + pixie = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pkg = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-14'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-15'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pkgrock = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + plain = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + plc = { + ['0.5-1'] = { + { + arch = "rockspec" + } + } + }, + ['plenary.nvim'] = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + plterm = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + plut = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + pluto = { + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['pm4-sdk-lua'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['pokerhand-eval'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pokitdok = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + poly1305 = { + ['1.0-5'] = { + { + arch = "rockspec" + } + } + }, + pomelo = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pool = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pop3 = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + portutils = { + ['0.1-7'] = { + { + arch = "rockspec" + } + } + }, + postgres = { + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['postgres-auth-server'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['postgres-decode'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + postgrest = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['power-table'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + power_widget = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + powerlog = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ppkit = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pprint = { + ['0.1.0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1'] = { + { + arch = "rockspec" + } + }, + ['0.1.2'] = { + { + arch = "rockspec" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + } + } + }, + prailude = { + ['0.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + prefix_tree = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + preloader = { + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['pretty-csv'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['pretty-fold.nvim'] = { + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + primes = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + print = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + } + }, + print_table = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + printable_chars = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['printoptions.sile'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['privilege-process-demo'] = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + procdata = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + process = { + ['1.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.8.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.9.1-1'] = { + { + arch = "rockspec" + } + } + }, + profi = { + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['prom-client'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + promise = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['promise-async'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['scm-0'] = { + { + arch = "rockspec" + } + } + }, + ['promise-async-await'] = { + ['0.7-1'] = { + { + arch = "rockspec" + } + } + }, + ['promise-es6'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['promise-lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['prompt-style'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + properset = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.3b-0'] = { + { + arch = "rockspec" + } + } + }, + proto = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + protobuf = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + } + } + }, + protomixin = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + prototype = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + proxyquire = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['prtr-dump'] = { + ['20121106-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20121212-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20161017-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['prtr-path'] = { + ['20121107-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20121212-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20180201-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['prtr-test'] = { + ['20121212-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20151116-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + psl = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ptable.sile'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + pthread = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['pub-sub'] = { + ['0.1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + public_suffix_list = { + ['1.0.201807-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201808-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201809-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201810-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201811-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201812-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201901-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201902-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201903-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201904-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201905-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201906-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201907-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201908-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201909-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201910-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201911-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.201912-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202001-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202002-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202003-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202004-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202005-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202006-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202007-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202008-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202009-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202010-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202011-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202012-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202101-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202102-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202103-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202104-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202105-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.202106-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + puerts = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pulseaudio = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + pulseaudio_cli = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pulseaudio_dbus = { + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pulseaudio_widget = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + puretoml = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + push = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + pystring = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + qaluate = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + qlass = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['qrcode.sile'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + qrprinter = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + } + }, + quantum = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + quest = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + queue = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['quick-scope'] = { + ['2.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['r1-lua-resty-waf'] = { + ['r0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + radarchart = { + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['radical.vim'] = { + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['radix-router'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rainbow-delimiters.nvim'] = { + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + raisin = { + ['3.0-1'] = { + { + arch = "rockspec" + } + } + }, + rake = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + randbytes = { + ['0.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + random = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['random-number'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + randomdist = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rapid-match-domain'] = { + ['1.0.0'] = { + { + arch = "rockspec" + } + } + }, + rapidjson = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + raven = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['raven-knight'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['raven-lua-rjson'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rawterm = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rblx_signal = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rcnb = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + reactivex = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + readkey = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + readline = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + readosm = { + ['1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + realpath = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + recaptcha = { + ['8.05.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.07.07-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + reco = { + ['1.4.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + } + } + }, + redis = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['redis-lua'] = { + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.4-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + redotenv = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + redstats = { + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + redux = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['redux-lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['redux-props'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ref = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + reflex = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + } + }, + refser = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + regex = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + reggae = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + regkex = { + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + remdebug = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + remotelog = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + remy = { + ['0.2.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rename = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['renamer.nvim'] = { + ['5.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['repeat.vim'] = { + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['repeatable-random-number'] = { + ['1.0.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + } + } + }, + ['req-content-type-transformer'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + reql = { + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['request-limit-validator'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + require = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['resilient.sile'] = { + ['2.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + resp = { + ['0.3.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.3-2'] = { + { + arch = "rockspec" + } + } + }, + ['rest.nvim'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + restia = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + restserver = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['restserver-xavante'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['resty-casbin-adapter'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['resty-dynacode'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + } + } + }, + ['resty-hostcheck'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['resty-mongol'] = { + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.7-2'] = { + { + arch = "rockspec" + } + }, + ['0.7-3'] = { + { + arch = "rockspec" + } + }, + ['0.7-4'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-2'] = { + { + arch = "rockspec" + } + }, + ['0.8-3'] = { + { + arch = "rockspec" + } + }, + ['0.8-4'] = { + { + arch = "rockspec" + } + } + }, + ['resty-newrelic'] = { + ['0.01-0'] = { + { + arch = "rockspec" + } + }, + ['0.01-1'] = { + { + arch = "rockspec" + } + }, + ['0.01-4'] = { + { + arch = "rockspec" + } + }, + ['0.01-5'] = { + { + arch = "rockspec" + } + }, + ['0.01-6'] = { + { + arch = "rockspec" + } + } + }, + ['resty-raven'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['resty-redis-cluster'] = { + ['1.02-4'] = { + { + arch = "rockspec" + } + }, + ['1.04-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.05-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['resty-redis-rate'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['resty-route'] = { + ['0.1'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['resty-shared-session'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['resty-smtp'] = { + ['1.0rc1-1'] = { + { + arch = "rockspec" + } + } + }, + ['resurfaceio-logger'] = { + ['1.2-3'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rez = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + } + } + }, + rfcvalid = { + ['0.6.0-1'] = { + { + arch = "rockspec" + } + } + }, + rgbstr = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + riemoon = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rings = { + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.2.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + riseml = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rjson = { + ['dev-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rkeys = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rl = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rmdir = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + } + }, + rmrf = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rndplugin = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + rnnlib = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + robotstxt = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rock-hello'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rockbuild = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rocketmq = { + ['2.1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rocks-config.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rocks-dev.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rocks-git.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rocks.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.16.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.17.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.18.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.19.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.19.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.20.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.20.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.21.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.21.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.21.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.21.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.22.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.23.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.24.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.25.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.25.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.26.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.27.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.27.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.28.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.29.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.29.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.29.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.30.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.30.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.31.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.31.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.31.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.31.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rocksolver = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + } + }, + rockspec2cmake = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['rocktest-foo'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rockwriter = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rollbar-nginx'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['roman-numerls'] = { + ['1.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['rose-pine'] = { + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + router = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rpc-prizm'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rpi-gpio'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rpio = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + } + }, + rs232 = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rsjson = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rtp.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rubato = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + } + } + }, + rubyapi = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + rude = { + ['0.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + runkit = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + runstache = { + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rustaceanvim = { + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.10.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.12.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.16.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.16.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.16.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.16.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.17.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.17.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.17.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.17.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.6.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.9.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.10.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.10.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.12.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.14.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.16.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.17.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.18.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.18.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.18.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.19.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.20.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.21.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.21.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.21.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.22.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.23.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.23.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.23.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.23.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.23.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.23.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.24.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.24.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.25.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.25.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.7.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.7.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rxi-json'] = { + ['dbf4b2d-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['rxi-json-lua'] = { + ['e1dbe93-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + rxlove = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + rxlua = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + } + }, + s3 = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['s3-cjson2'] = { + ['1.0-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + s6ftrig = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + saci = { + ['9.03.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + safer = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sailor = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['sailor-md'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + salt = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + saml = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['samp-events'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['samp-favorites'] = { + ['1.0'] = { + { + arch = "rockspec" + } + } + }, + sample_rtcomponent = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sandbox = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + santoku = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.100-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.101-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.102-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.103-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.104-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.105-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.106-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.107-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.108-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.109-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.110-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.111-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.112-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.113-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.114-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.115-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.116-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.117-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.118-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.119-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.121-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.122-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.123-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.124-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.125-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.126-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.127-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.128-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.129-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.130-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.131-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.132-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.133-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.134-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.135-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.136-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.137-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.138-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.139-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.140-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.141-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.142-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.143-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.144-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.145-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.146-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.147-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.148-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.150-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.151-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.152-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.153-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.154-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.156-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.157-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.158-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.159-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.160-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.161-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.162-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.163-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.164-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.165-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.166-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.167-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.168-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.169-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.170-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.171-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.172-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.173-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.174-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.175-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.176-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.177-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.178-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.179-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.180-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.181-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.182-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.183-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.184-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.185-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.186-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.187-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.188-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.189-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.190-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.191-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.192-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.193-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.194-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.195-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.196-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.197-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.198-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.199-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.200-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.201-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.202-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.203-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.204-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.24-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.27-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.28-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.29-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.31-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.32-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.33-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.34-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.35-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.36-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.37-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.38-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.39-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.40-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.41-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.42-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.43-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.44-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.45-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.46-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.47-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.48-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.49-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.50-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.51-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.52-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.53-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.54-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.55-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.56-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.57-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.58-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.60-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.61-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.62-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.64-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.65-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.66-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.67-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.68-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.69-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.70-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.71-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.72-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.73-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.74-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.76-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.77-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.78-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.79-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.80-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.81-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.82-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.83-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.84-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.85-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.86-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.87-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.88-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.89-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.90-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.91-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.92-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.93-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.94-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.96-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.97-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.98-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.99-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-bert'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-bitmap'] = { + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-bundle'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.24-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.27-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.28-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.29-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-cli'] = { + ['0.0.100-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.101-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.102-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.103-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.104-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.105-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.106-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.107-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.108-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.109-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.110-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.111-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.112-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.113-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.114-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.115-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.116-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.117-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.118-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.119-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.120-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.121-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.122-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.123-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.124-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.125-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.126-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.127-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.128-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.129-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.130-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.131-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.132-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.133-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.134-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.135-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.136-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.137-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.138-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.139-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.140-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.141-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.142-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.143-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.145-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.146-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.147-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.148-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.149-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.150-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.151-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.152-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.153-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.154-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.155-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.156-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.157-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.158-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.159-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.160-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.161-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.162-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.163-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.164-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.165-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.166-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.167-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.167-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.168-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.169-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.170-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.171-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.172-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.173-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.174-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.175-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.176-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.177-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.178-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.179-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.180-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.181-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.182-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.183-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.184-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.185-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.186-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.187-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.188-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.189-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.190-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.191-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.192-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.193-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.194-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.195-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.196-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.197-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.198-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.199-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.200-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.201-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.202-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.203-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.204-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.205-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.206-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.207-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.208-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.24-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.27-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.28-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.29-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.31-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.32-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.33-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.34-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.35-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.36-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.37-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.38-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.39-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.40-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.41-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.42-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.43-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.44-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.45-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.46-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.47-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.48-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.49-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.50-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.51-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.52-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.53-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.54-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.55-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.56-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.57-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.58-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.60-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.61-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.62-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.64-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.65-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.66-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.67-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.68-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.69-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.70-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.71-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.72-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.73-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.74-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.76-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.77-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.78-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.79-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.80-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.81-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.82-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.83-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.84-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.85-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.86-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.87-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.88-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.89-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.90-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.91-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.92-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.93-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.94-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.95-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.96-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.98-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-fs'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.24-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.27-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.28-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.29-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.31-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.32-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-geo-pdf'] = { + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-html'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-iconv'] = { + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-jpeg'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-make'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.27-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.28-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.29-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.31-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.32-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.33-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.34-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.35-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.36-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.37-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.38-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.39-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.40-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.41-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.42-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.43-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.44-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.45-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.46-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.47-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.48-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.49-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.50-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.51-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.52-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.53-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.54-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.55-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.56-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.57-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.58-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.59-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.60-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.61-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.62-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.63-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.64-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.65-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.66-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.67-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.68-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.69-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.70-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-matrix'] = { + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-pdf'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-porter'] = { + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-python'] = { + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.24-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.27-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.28-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.29-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.31-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.32-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.33-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.34-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.35-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.36-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.37-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-sqlite'] = { + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-sqlite-migrate'] = { + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-system'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-template'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.24-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-test'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-2'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-test-runner'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-tsetlin'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.24-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.29-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.31-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.32-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.33-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.34-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.35-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.36-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.37-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.38-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.39-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.40-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.41-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.42-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.43-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.44-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.45-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.46-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.47-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.48-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.49-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + ['santoku-web'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.100-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.101-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.102-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.103-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.104-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.105-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.106-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.107-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.108-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.109-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.110-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.111-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.112-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.23-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.24-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.27-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.28-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.29-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.31-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.32-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.33-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.34-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.35-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.36-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.37-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.38-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.39-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.40-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.41-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.42-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.43-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.44-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.45-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.46-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.47-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.48-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.49-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.50-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.51-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.52-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.53-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.55-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.56-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.57-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.58-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.59-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.60-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.61-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.62-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.63-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.64-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.65-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.66-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.67-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.68-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.69-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.70-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.71-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.72-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.73-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.74-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.75-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.76-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.77-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.78-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.79-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.80-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.81-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.82-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.83-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.84-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.85-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.86-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.87-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.88-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.89-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.90-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.91-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.92-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.93-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.94-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.95-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.96-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.97-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.98-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.99-1'] = { + { + arch = "rockspec" + } + } + }, + sass = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + satelito = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['beta-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['beta-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['beta-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + say = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sayit = { + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['sc-lua-resty-auto-ssl'] = { + ['0.13.1-1'] = { + { + arch = "rockspec" + } + } + }, + scaffold = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['scalable-rate-limiter'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + scene = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + schema = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['schemastore.nvim'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + schwartziantransformutils = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + } + } + }, + sci = { + ['1.0.0.beta12-1'] = { + { + arch = "rockspec" + } + } + }, + ['screenkey.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['scrollbar.nvim'] = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + scrypt = { + ['0.1.1-0'] = { + { + arch = "rockspec" + } + } + }, + seawolf = { + ['0.8-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + } + } + }, + ['secmc-plugin'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + see = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + seiran = { + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + selectex = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + selene = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + self = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + } + } + }, + semparse = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + semver = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + } + } + }, + sendgrid = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sendmail = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sentry = { + ['0.8.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.1-3'] = { + { + arch = "rockspec" + } + } + }, + ['ser-alloyed'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + serpent = { + ['0.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.28-1'] = { + { + arch = "rockspec" + } + }, + ['0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.30-2'] = { + { + arch = "rockspec" + } + } + }, + ['servicekit-posix'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['session.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sessiond_dbus = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['devel-1'] = { + { + arch = "rockspec" + } + } + }, + set = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['set-lua'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['set-upstream-by-header'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + setenv = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + setuid = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['sfcrand-lua5.3'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['sfcrand-luajit'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sfmt = { + ['1.5.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.4-2'] = { + { + arch = "rockspec" + } + } + }, + ['sfn-auth'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sfs = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sfxr = { + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['sg.nvim'] = { + ['1.0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sgp30 = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sh = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sha1 = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sha2 = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + } + }, + ['shape-detector'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + shapeshift = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sharedtensor = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['shell-games'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + shelve = { + ['0.35.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.35.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.35.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.35.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.35.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + shexpand = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + shiki = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + shim = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + shiplog = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sht20 = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sia = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.6-2'] = { + { + arch = "rockspec" + } + }, + ['0.2.6-3'] = { + { + arch = "rockspec" + } + } + }, + sidekiqjobpusher = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + sif = { + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + signal = { + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + } + } + }, + signalise = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['silex.sile'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['simple-lua-json'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + simple_classes_lua = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + simple_test = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + simpleitk = { + ['0.10-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.2.0-0'] = { + { + arch = "rockspec" + } + } + }, + simulua = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['sinx-lua'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + sirocco = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + } + } + }, + sitegen = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + skewheap = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + skooma = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['skywalking-nginx-lua'] = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['skywalking-nginx-lua-plugin'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['skywalking-nginx-lua-test'] = { + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + } + } + }, + slaxml = { + ['0.8-1'] = { + { + arch = "rockspec" + } + } + }, + sleep = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-3'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + slingshot = { + ['7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sllog = { + ['0.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + slncrypto = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + slnet = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + slnunicode = { + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + slowjson = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + slt2 = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['smart-splits.nvim'] = { + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['smartquotes.sile'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + smaz = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + smithsnmp = { + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + snaphelpers = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sncl = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + snowflake = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + snowplowtracker = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sociallua = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + socks5 = { + ['1.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sofa = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + solr = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + somata = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sonata = { + ['0.9-1'] = { + { + arch = "rockspec" + } + } + }, + spaces = { + ['0.3-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-13'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-14'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + spawn = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + specl = { + ['1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['14.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['speeddating.vim'] = { + ['20081016-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sphericaldefence = { + ['0.0.3-3'] = { + { + arch = "rockspec" + } + } + }, + split = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sproto = { + ['0.1.20210820-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sputnik = { + ['9.03.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['sqids-lua'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['sql-orm'] = { + ['0.3.20210821-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.20210828-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.20211015-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.20220801-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.20220813-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.20230409-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.20230709-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sql2lua = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + sqlcipher = { + ['4.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['4.4.2-2'] = { + { + arch = "rockspec" + } + } + }, + sqlite = { + ['master-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['sqlite.lua'] = { + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sqlite3 = { + ['0.4.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sqlrocks = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sqltable = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['squall-router'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['squirrel.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + squirt = { + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + srplib = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + srt = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + } + }, + ssh = { + ['0.0.1-0'] = { + { + arch = "rockspec" + } + } + }, + st = { + ['0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + stacktraceplus = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + starwarsnames = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + static = { + ['2.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + statsd = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['std._debug'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['std.functional'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['std.normalize'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['std.prototype'] = { + ['1.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['std.strict'] = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + stdfs = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-2'] = { + { + arch = "rockspec" + } + }, + ['0.4-3'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.8-1'] = { + { + arch = "rockspec" + } + } + }, + stdlib = { + ['17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['24-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['27-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['28-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['29-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['29-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['30-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['31-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['32-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['33-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['34.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['35-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['36-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['37-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['38-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['39-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4-2'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['40-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['41.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['41.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['41.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['41.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['41.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['41.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + steentje = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['storm-mode.nvim'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['stormpath-nginx'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + stp = { + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + str = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + strbuffer = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + streamcsv = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + strictness = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['string-capitalize'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['string-contains'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['string-format'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['string-format-all'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['string-random'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['string-replace'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['string-split'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['string-token'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['string-trim'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + stringdistance = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + stringex = { + ['0.1.0-2'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + } + }, + stringifylua = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + stringio = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['stringizer-lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-10'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + } + } + }, + stringstream = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + stringy = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + striter = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + strong = { + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + strongstring = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + strsubst = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + struct = { + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['struct.lua'] = { + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['structlog.nvim'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + strutil = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + } + } + }, + stuart = { + ['2.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['stuart-ml'] = { + ['2.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['stuart-redis'] = { + ['0.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + submodsearcher = { + ['1-1'] = { + { + arch = "rockspec" + } + } + }, + subproc = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + subprocess = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['substitute.nvim'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + suit = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + sunclass = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + supernova = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + suproxy = { + ['v0.6.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['surround.vim'] = { + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + swapi = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['sweetie.nvim'] = { + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + swef = { + ['1-2'] = { + { + arch = "rockspec" + } + }, + ['1-3'] = { + { + arch = "rockspec" + } + } + }, + switch = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + symdiff = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + symmetric = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sync = { + ['0.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + syntaxhighlight = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sys = { + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + sysdetect = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + t2t = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['tabby.nvim'] = { + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['table-flatten'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + } + }, + table_dump = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + table_goodies = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + table_new = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + tablesalt = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tableshape = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tableutils = { + ['1.21.07.27-1'] = { + { + arch = "rockspec" + } + }, + ['1.21.07.27-2'] = { + { + arch = "rockspec" + } + }, + ['1.21.07.27-3'] = { + { + arch = "rockspec" + } + } + }, + tableview = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tablua = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tabular = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + taggedcoro = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['taggedcoro-purelua'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + talents = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + talua = { + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + tamale = { + ['1.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tango-complete'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tango-copas'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tanguytestluarocks = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tarantool-checks'] = { + ['3.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['tarantool-errors'] = { + ['2.2.1-1'] = { + { + arch = "rockspec" + } + } + }, + tarantoolapp = { + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tbhss = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.10-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.11-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.12-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.16-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.17-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.18-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.19-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.20-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.21-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.22-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.24-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.25-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.26-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.27-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.29-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.30-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.32-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.34-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.35-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.36-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.39-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.40-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + } + } + }, + tblr = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tcc = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + tcheck = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tcp-body-log'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + tdb = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['tdcli.lua'] = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tdigest = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + teateatea = { + ['1.3-1'] = { + { + arch = "rockspec" + } + } + }, + tekui = { + ['1.05-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.07-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + telegraf = { + ['1.1.2-1'] = { + { + arch = "rockspec" + } + } + }, + telegram = { + ['0.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['telegram-bot-api'] = { + ['3.4.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.5.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['telegram-bot-lua'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.10-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.3.2-0'] = { + { + arch = "rockspec" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9-0'] = { + { + arch = "rockspec" + } + }, + ['1.9-1'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + } + }, + telegraph = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + telescope = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['telescope-manix'] = { + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['telescope-zf-native.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['telescope.nvim'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['scm-1'] = { + { + arch = "rockspec" + } + } + }, + teliksandi = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + teml = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + template = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.2-3'] = { + { + arch = "rockspec" + } + } + }, + ['template-text'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + templet = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + terebi = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + termfx = { + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + terminfo = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + terminfofont = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tersen = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tesla = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['test-lua-plugin'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['test-package'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['test-xml-json'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + testcase = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.10.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.11.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.7-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.8-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.9-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + } + } + }, + testingunit = { + ['0.1-0'] = { + { + arch = "rockspec" + } + } + }, + testy = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-51'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-52'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-53'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tethys = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['textsubsuper.sile'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + tgbot = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tgen = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + tglua = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + thcsv = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['themer.lua'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + themoonlitknot = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['threat-protection'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ticmap2tmx = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tiktoken_core = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['time-clock'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['time-sleep'] = { + ['0.2.1-1'] = { + { + arch = "rockspec" + } + } + }, + timerfd = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + timerwheel = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tincan = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tiny-ecs'] = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tinyobj = { + ['0.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + tl = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tlcheck = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + tlru = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tls-mailer'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tlua = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tmg-cookie-auth-shim'] = { + ['0.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-42'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-43'] = { + { + arch = "rockspec" + } + }, + ['1.0.5-44'] = { + { + arch = "rockspec" + } + }, + ['1.0.5-45'] = { + { + arch = "rockspec" + } + }, + ['1.0.6-46'] = { + { + arch = "rockspec" + } + }, + ['1.0.7-47'] = { + { + arch = "rockspec" + } + }, + ['1.0.8-48'] = { + { + arch = "rockspec" + } + } + }, + tn = { + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tnv-kong-plugin-api-transformer'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + toboolean = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + todo = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['todo-comments.nvim'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['toggleterm.nvim'] = { + ['2.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tointeger = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['token-handler'] = { + ['0.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-2'] = { + { + arch = "rockspec" + } + } + }, + tokyocabinet = { + ['1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tokyonight.nvim'] = { + ['3.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tomba = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + } + } + }, + toml = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['toml-edit'] = { + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tonos-client'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.14.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.16.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.17.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.18.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.20.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.21.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.21.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.22.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.23.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.24.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.25.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.26.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.27.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.28.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.29.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.30.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.31.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.32.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.33.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.33.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.34.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.35.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.35.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.36.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.36.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.37.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.37.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.38.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.38.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.39.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.40.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.41.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.42.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.42.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.43.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.43.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.43.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.43.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.44.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.45.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['torch-buffer'] = { + ['0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['torch-dataframe'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.5-0'] = { + { + arch = "rockspec" + } + }, + ['1.6-0'] = { + { + arch = "rockspec" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + } + }, + ['1.7-0'] = { + { + arch = "rockspec" + } + } + }, + ['torch-dir-loader'] = { + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['torch-graph-criterion'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['torch-hdf5-logger'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['torch-word-emb'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + toto = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tpatterns = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tpdu = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tprint = { + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tqdm-lua'] = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + transducers = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + treap = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + tree = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tree-sitter-norg'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tree-sitter-norg-meta'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tree-sitter-orgmode'] = { + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + treelib = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['trouble.nvim'] = { + ['2.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.4.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + try = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['try-catch-finally'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['try-lua'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tsc.nvim'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tstrict = { + ['0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tsuru-rpaasv2'] = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ttodo = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tulip = { + ['0.0.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.10-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.17-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tulip-cli'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tundrawolf = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + } + } + }, + tuple = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + turbo = { + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + } + }, + ['1.1-4'] = { + { + arch = "rockspec" + } + }, + ['1.1-5'] = { + { + arch = "rockspec" + } + }, + ['1.1-6'] = { + { + arch = "rockspec" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0-2'] = { + { + arch = "rockspec" + } + }, + ['2.0-3'] = { + { + arch = "rockspec" + } + }, + ['2.0-4'] = { + { + arch = "rockspec" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['turbo-fetch'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['turbo-multipart-post'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['turbo-redis'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['turbo-sqlite3'] = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['turbo-telegram'] = { + ['0.9-1'] = { + { + arch = "rockspec" + } + } + }, + tv = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['tw-lua-autocomplete'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + tween = { + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['twilight.nvim'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + twitter = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + type = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + } + } + }, + typecheck = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + typed = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + typedobject = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + typical = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['typst-lua'] = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8-2'] = { + { + arch = "rockspec" + } + } + }, + ['u-test'] = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['uap-lua'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + udev = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-0'] = { + { + arch = "rockspec" + } + } + }, + ufy = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ufylayout = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + uinput = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ulid = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + umdlua = { + ['1.0-2'] = { + { + arch = "rockspec" + } + } + }, + uname = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['unauthorized-handler'] = { + ['0.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-10'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-2'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-9'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-11'] = { + { + arch = "rockspec" + } + }, + ['2.0.2-12'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-13'] = { + { + arch = "rockspec" + } + } + }, + underscore = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['underscore-dot-lua'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['uni-queue'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + unicorndecode = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['unimpaired.nvim'] = { + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['unimpaired.vim'] = { + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + unpack = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + unreliablefs = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['unsplash-lua'] = { + ['0.5-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + unzip = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + upcache = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + upnpclient = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + upower_dbus = { + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['upstream-auth-hmac'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['uriid1-lua-extensions'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + url = { + ['1.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.2.2-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['url-filter'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + urlencode = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + utf8 = { + ['1.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + utf8fix = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + util = { + ['0-0'] = { + { + arch = "rockspec" + } + } + }, + uuid = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + uuidx = { + ['1.0-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + uulua = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['validate-args'] = { + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + validation = { + ['0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + valua = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.2.2-3'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vanilla = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0.rc2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0.rc3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0.rc4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.rc1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vararg = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.patch1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['vararg-lua'] = { + ['1.1.patch1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vectorize = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['verify-token'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + verse = { + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + version = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + versium = { + ['9.02.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vert = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vexilla_client = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['vgit.nvim'] = { + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vida = { + ['v0.1-10'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v0.1-11'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v0.1-12'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + video_streaming = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + videur = { + ['0.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + vinspect = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + virtes = { + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['virtual-schema-common-lua'] = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['2.4.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['3.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['4.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vizdoom = { + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vklib = { + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vmake = { + ['1.2.0-2'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-3'] = { + { + arch = "rockspec" + } + }, + ['1.3.0-5'] = { + { + arch = "rockspec" + } + }, + ['1.3.1-6'] = { + { + arch = "rockspec" + } + }, + ['1.4.0-7'] = { + { + arch = "rockspec" + } + }, + ['1.4.1-8'] = { + { + arch = "rockspec" + } + }, + ['1.4.2-9'] = { + { + arch = "rockspec" + } + }, + ['1.5.0-10'] = { + { + arch = "rockspec" + } + }, + ['1.5.1-11'] = { + { + arch = "rockspec" + } + }, + ['1.5.2-12'] = { + { + arch = "rockspec" + } + }, + ['1.5.3-13'] = { + { + arch = "rockspec" + } + }, + ['1.5.4-14'] = { + { + arch = "rockspec" + } + }, + ['1.6.0-15'] = { + { + arch = "rockspec" + } + }, + ['1.7.0-16'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-17'] = { + { + arch = "rockspec" + } + }, + ['2.0.0-18'] = { + { + arch = "rockspec" + } + }, + ['2.0.1-19'] = { + { + arch = "rockspec" + } + }, + ['2.1.0-20'] = { + { + arch = "rockspec" + } + }, + ['3.0.0-21'] = { + { + arch = "rockspec" + } + }, + ['3.1.0-24'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vmod = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + } + }, + void = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['vscode-mobdebug'] = { + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vstruct = { + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + vusted = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wagon = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + waitpid = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + } + } + }, + warn = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + warna = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + warp = { + ['0.1'] = { + { + arch = "rockspec" + } + }, + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + }, + ['2.4-0'] = { + { + arch = "rockspec" + } + } + }, + ['watch-the-new-mutants-online-free'] = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + watcher = { + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wax = { + ['0.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['latest-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['next-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['wayz-kafka-log'] = { + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wch = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wcwidth = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + web = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['web-devicons'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['web-driver'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + web_sanitize = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + webrocks = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "macosx-x86" + }, { + arch = "src" + } + } + }, + websocket = { + ['1.0-1'] = { + { + arch = "rockspec" + } + } + }, + wespike = { + ['0.0-1'] = { + { + arch = "rockspec" + } + } + }, + wezterm_include_launch_items = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + whereami = { + ['1.0.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + } + } + }, + whetlab = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + which = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + ['which-key.nvim'] = { + ['1.6.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['wib-kong'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wildcard_pattern = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + winapi = { + ['1.4.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + windcon = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['windline.nvim'] = { + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + winreg = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wiola = { + ['0.10.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wire = { + ['0.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wires = { + ['1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['wisdom-gateway-oidc-plugin'] = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wluaunit = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wowcig = { + ['0.10-0'] = { + { + arch = "rockspec" + } + }, + ['0.11-0'] = { + { + arch = "rockspec" + } + }, + ['0.12-0'] = { + { + arch = "rockspec" + } + }, + ['0.12.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.12.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.12.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.12.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.12.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.13.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.13.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.14.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.14.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.14.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.15.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.15.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.16.0-0'] = { + { + arch = "rockspec" + } + }, + ['0.16.1-0'] = { + { + arch = "rockspec" + } + }, + ['0.16.2-0'] = { + { + arch = "rockspec" + } + }, + ['0.16.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.16.4-0'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-0'] = { + { + arch = "rockspec" + } + }, + ['0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-0'] = { + { + arch = "rockspec" + } + }, + ['0.6-0'] = { + { + arch = "rockspec" + } + }, + ['0.7-0'] = { + { + arch = "rockspec" + } + }, + ['0.8-0'] = { + { + arch = "rockspec" + } + }, + ['0.9-0'] = { + { + arch = "rockspec" + } + } + }, + wsapi = { + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['wsapi-fcgi'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['wsapi-openresty'] = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['wsapi-xavante'] = { + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + }, { + arch = "win32-x86" + } + }, + ['1.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + wtf = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-action-html_response'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['wtf-action-json_response'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-action-log'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['wtf-action-redirect'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-action-simple_response'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-action-store'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-demo'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-fork-lua-resty-redis'] = { + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-fork-resty-mongol'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-honeybot-core'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-cve_2019_6340'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-asa'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-asa-data'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-drupal'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-drupal-data'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-owa'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-owa-data'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-sonicwall'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-sonicwall-data'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-welcome'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-welcome-data'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['wtf-plugin-honeybot-fake-wordpress'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-fake-wordpress-data'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-sandbox'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-plugin-honeybot-troll_die'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-2'] = { + { + arch = "rockspec" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-storage-mongodb'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + } + }, + ['wtf-storage-redis'] = { + ['0.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + } + } + }, + ['x-lua-api-gateway-aws'] = { + ['1.7.1-0'] = { + { + arch = "rockspec" + } + } + }, + xavante = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + }, + ['2.2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + } + }, + ['2.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.4.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xcomposer = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['3.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['xcq-subprocess'] = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xctrl = { + ['20101026-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xerceslua = { + ['1.0-0'] = { + { + arch = "rockspec" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + } + }, + xhmoon = { + ['1.0.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['xls-read'] = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xlsxwriter = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xlua = { + ['1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xml = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['xml-json'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + } + } + }, + xml2lua = { + ['1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.3-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.4-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.5-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.6-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['v1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xml_tree = { + ['1.0-1'] = { + { + arch = "rockspec" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + } + } + }, + xmllpegparser = { + ['2.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xmlparser = { + ['2.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['2.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xmlua = { + ['0.9.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.3-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.4-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.5-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.6-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.7-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.8-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.9-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.0-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.2.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xpcall = { + ['0.2.0-1'] = { + { + arch = "rockspec" + } + } + }, + xpgsql = { + ['0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xssfilter = { + ['10.12.28-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['8.04.20-1'] = { + { + arch = "rockspec" + }, { + arch = "all" + }, { + arch = "src" + } + } + }, + xsys = { + ['1.0.2-1'] = { + { + arch = "rockspec" + } + } + }, + xtype = { + ['1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + xxhash = { + ['v1.0-1'] = { + { + arch = "rockspec" + } + } + }, + xxtea = { + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.1-1'] = { + { + arch = "rockspec" + } + }, + ['1.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + yaml = { + ['0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['1.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + yamlscript = { + ['0.0.16-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + yamlstar = { + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['yanky.nvim'] = { + ['2.0.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['yazi.nvim'] = { + ['master-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['ydauth-test'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.0-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + yoke = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-3'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-4'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-6'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-7'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-8'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-9'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.2-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['yoke-file'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['yoke-imdb'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.0.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['yoke-mail'] = { + ['0.0.1-0'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + yue = { + ['0.0.1'] = { + { + arch = "rockspec" + } + } + }, + yuescript = { + ['0.10.11-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.15-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.10.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.11.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.12.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.13.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.14.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.13-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.18-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.20-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.21-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.23-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.23-5'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.25-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.25-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.26-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.29-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.15.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.16.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.10-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.12-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.17.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.18.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.19.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.20.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.21.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.21.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.21.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.21.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.22.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.22.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.22.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.22.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.23.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.6.9-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.14-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.8-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.8.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.5-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.9.6-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + yyjson = { + ['0.4.0-1'] = { + { + arch = "rockspec" + } + }, + ['0.5.1-1'] = { + { + arch = "rockspec" + } + }, + ['0.8.0-1'] = { + { + arch = "rockspec" + } + } + }, + zee = { + ['0.7-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7-2'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.7.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + ['zen-mode.nvim'] = { + ['1.3.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + }, + zenroom = { + ['0.9-1'] = { + { + arch = "rockspec" + } + }, + ['0.9-2'] = { + { + arch = "rockspec" + } + }, + ['0.9-3'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-analyzeall'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-autodelimiter'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-autodelimitersurroundselection'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-autoindent'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-autostartdebug'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-blockcursor'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-clippy'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-cloneview'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-closetabsleftright'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-colourpicker'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-cuberite'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-documentmap'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-edgemark'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-editorautofocusbymouse'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-eris'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-escapetoquit'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-extregister'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-filetreeoneclick'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-hidemenu'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-hidemousewhentyping'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-highlightselected'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-launchtime'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-localhelpmenu'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-luadist'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-luarocks'] = { + ['0.4.1-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-maketoolbar'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-markchar'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-moonscript'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-moonscriptlove'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-moveline'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-noblinkcursor'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-openimagefile'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-openra'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-openwithdefault'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-outputclone'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-outputtofile'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-overtype'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-projectsettings'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-realtimewatch'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-redbean'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-redis'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-referencepanel'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-refreshproject'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-remoteedit'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-savealleveryxrunning'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-saveonappswitch'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-saveonfocuslost'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-screenshot'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-shebangtype'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-showluareference'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-showreference'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-striptrailingwhitespace'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-syntaxcheckontype'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-tasks'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-tildemenu'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-todo'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-todoall'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-torch7'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-uniquetabname'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-urho3d'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-verbosesaving'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-wordcount'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-wordwrapmenu'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zerobranepackage-xml'] = { + ['0.1.0-0'] = { + { + arch = "rockspec" + } + } + }, + ['zhangsaizz-skywalking-nginx-lua'] = { + ['master-0'] = { + { + arch = "rockspec" + } + } + }, + zipwriter = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.1-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.2-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.3-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.4-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + }, + ['0.1.5-1'] = { + { + arch = "rockspec" + } + } + }, + ['zk-nvim'] = { + ['0.1.0-1'] = { + { + arch = "rockspec" + }, { + arch = "src" + } + } + } +} From bc7bfb5d361cbb95937876eb5171bb78c1f6b4ee Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 25 Jun 2024 15:42:29 +0000 Subject: [PATCH 576/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/rocks.lua | 883 ++++++++++++++--------------------- 1 file changed, 358 insertions(+), 525 deletions(-) diff --git a/lua/lazy/community/rocks.lua b/lua/lazy/community/rocks.lua index 1b7a361..a16b088 100644 --- a/lua/lazy/community/rocks.lua +++ b/lua/lazy/community/rocks.lua @@ -1,873 +1,706 @@ -return { - { +return +{ { name = "15puzzle.nvim", url = "NStefan002/15puzzle.nvim", - version = "1.4.1-1", - }, - { + version = "1.4.1-1" + }, { + name = "2048.nvim", + url = "NStefan002/2048.nvim", + version = "2.8.2-1" + }, { + name = "adopure.nvim", + url = "Willem-J-an/adopure.nvim", + version = "1.1.0-1" + }, { name = "aerial.nvim", url = "stevearc/aerial.nvim", - version = "1.7.0-1", - }, - { + version = "1.7.0-1" + }, { name = "ai.nvim", url = "S1M0N38/ai.nvim", - version = "0.1.0-1", - }, - { + version = "0.1.0-1" + }, { name = "auto-hlsearch.nvim", url = "asiryk/auto-hlsearch.nvim", - version = "1.1.0-1", - }, - { + version = "1.1.0-1" + }, { name = "better-escape.nvim", url = "max397574/better-escape.nvim", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "bufferline.nvim", url = "akinsho/bufferline.nvim", - version = "4.6.1-1", - }, - { + version = "4.6.1-1" + }, { name = "ccc.nvim", url = "uga-rosa/ccc.nvim", - version = "1.6.0-1", - }, - { + version = "1.6.0-1" + }, { name = "ci-template.nvim", url = "linrongbin16/ci-template.nvim", - version = "8.1.0-1", - }, - { + version = "8.1.0-1" + }, { name = "colorbox.nvim", url = "linrongbin16/colorbox.nvim", - version = "3.1.0-1", - }, - { + version = "3.1.0-1" + }, { name = "colorbuddy.nvim", url = "tjdevries/colorbuddy.nvim", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "colortils.nvim", url = "nvim-colortils/colortils.nvim", - version = "1.1.0-1", - }, - { + version = "1.1.0-1" + }, { name = "commander.nvim", url = "FeiyouG/commander.nvim", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "comment-box.nvim", url = "LudoPinelli/comment-box.nvim", - version = "1.0.2-1", - }, - { + version = "1.0.2-1" + }, { name = "comment.nvim", url = "numToStr/Comment.nvim", - version = "0.8.0-1", - }, - { + version = "0.8.0-1" + }, { name = "commons.nvim", url = "linrongbin16/commons.nvim", - version = "18.0.0-1", - }, - { + version = "18.0.0-1" + }, { name = "conform.nvim", url = "stevearc/conform.nvim", - version = "6.0.0-1", - }, - { + version = "6.0.0-1" + }, { name = "cybu.nvim", url = "ghillb/cybu.nvim", - version = "1.0-1", - }, - { + version = "1.0-1" + }, { name = "daylight.nvim", url = "NTBBloodbath/daylight.nvim", - version = "1.1.0-1", - }, - { + version = "1.1.0-1" + }, { name = "deadcolumn.nvim", url = "Bekaboo/deadcolumn.nvim", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "decipher.nvim", url = "MisanthropicBit/decipher.nvim", - version = "1.0.1-1", - }, - { + version = "1.0.1-1" + }, { name = "detour.nvim", url = "carbon-steel/detour.nvim", - version = "1.4.0-1", - }, - { + version = "1.4.0-1" + }, { name = "dial.nvim", url = "monaqa/dial.nvim", - version = "0.4.0-1", - }, - { + version = "0.4.0-1" + }, { name = "distant.nvim", url = "chipsenkbeil/distant.nvim", - version = "0.1.2-1", - }, - { + version = "0.1.2-1" + }, { name = "donut.nvim", url = "NStefan002/donut.nvim", - version = "2.1.0-1", - }, - { + version = "2.1.0-1" + }, { name = "dressing.nvim", url = "stevearc/dressing.nvim", - version = "2.2.2-1", - }, - { + version = "2.2.2-1" + }, { name = "dropbar.nvim", url = "Bekaboo/dropbar.nvim", - version = "8.4.0-1", - }, - { + version = "8.4.0-1" + }, { name = "duck.nvim", url = "tamton-aquib/duck.nvim", - version = "main-1", - }, - { + version = "main-1" + }, { name = "easypick.nvim", url = "axkirillov/easypick.nvim", - version = "0.6.0-1", - }, - { + version = "0.6.0-1" + }, { name = "edgy.nvim", url = "folke/edgy.nvim", - version = "1.9.1-1", - }, - { + version = "1.9.1-1" + }, { name = "elixir-tools.nvim", url = "elixir-tools/elixir-tools.nvim", - version = "0.14.3-1", - }, - { + version = "0.14.3-1" + }, { name = "feline.nvim", url = "freddiehaddad/feline.nvim", - version = "1.6.2-1", - }, - { + version = "1.6.2-1" + }, { name = "fidget.nvim", url = "j-hui/fidget.nvim", - version = "1.4.1-1", - }, - { + version = "1.4.1-1" + }, { name = "flash.nvim", url = "folke/flash.nvim", - version = "1.18.3-1", - }, - { + version = "1.18.3-1" + }, { name = "flatten.nvim", url = "willothy/flatten.nvim", - version = "0.5.1-1", - }, - { + version = "0.5.1-1" + }, { name = "flutter-tools.nvim", url = "akinsho/flutter-tools.nvim", - version = "1.10.0-1", - }, - { + version = "1.10.0-1" + }, { name = "focus.nvim", url = "nvim-focus/focus.nvim", - version = "1.0.2-1", - }, - { + version = "1.0.2-1" + }, { name = "freeze-code.nvim", url = "AlejandroSuero/freeze-code.nvim", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "fugit2.nvim", url = "SuperBo/fugit2.nvim", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "funnyfiles.nvim", url = "aikooo7/funnyfiles.nvim", - version = "1.0.1-1", - }, - { + version = "1.0.1-1" + }, { name = "fzfx.nvim", url = "linrongbin16/fzfx.nvim", - version = "6.4.0-1", - }, - { + version = "6.4.0-1" + }, { name = "galileo.nvim", url = "S1M0N38/galileo.nvim", - version = "0.0.2-1", - }, - { + version = "0.0.2-1" + }, { name = "gentags.nvim", url = "linrongbin16/gentags.nvim", - version = "3.0.2-1", - }, - { + version = "3.0.2-1" + }, { name = "git-worktree.nvim", url = "polarmutex/git-worktree.nvim", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "github-nvim-theme", url = "projekt0n/github-nvim-theme", - version = "1.0.2-1", - }, - { + version = "1.0.2-1" + }, { name = "gitlinker.nvim", url = "linrongbin16/gitlinker.nvim", - version = "4.13.1-1", - }, - { + version = "4.13.1-1" + }, { name = "gitsigns.nvim", url = "lewis6991/gitsigns.nvim", - version = "scm-1", - }, - { + version = "scm-1" + }, { name = "glow.nvim", url = "ellisonleao/glow.nvim", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "go.nvim", url = "ray-x/go.nvim", - version = "0.2.1-1", - }, - { + version = "0.2.1-1" + }, { name = "godo.nvim", url = "arthuradolfo/godo.nvim", - version = "1.1.0-0", - }, - { + version = "1.1.0-0" + }, { name = "grapple.nvim", url = "cbochs/grapple.nvim", - version = "0.30.0-1", - }, - { + version = "0.30.0-1" + }, { name = "gruvbox.nvim", url = "ellisonleao/gruvbox.nvim", - version = "2.0.0-1", - }, - { + version = "2.0.0-1" + }, { name = "haskell-snippets.nvim", url = "mrcjkb/haskell-snippets.nvim", - version = "1.4.4-1", - }, - { + version = "1.4.4-1" + }, { name = "haskell-tools.nvim", url = "mrcjkb/haskell-tools.nvim", - version = "3.1.10-1", - }, - { + version = "3.1.10-1" + }, { name = "headlines.nvim", url = "lukas-reineke/headlines.nvim", - version = "4.0.1-1", - }, - { + version = "4.0.1-1" + }, { name = "heirline.nvim", url = "rebelot/heirline.nvim", - version = "1.0.6-1", - }, - { + version = "1.0.6-1" + }, { name = "hlchunk.nvim", url = "shellRaining/hlchunk.nvim", - version = "1.1.0-1", - }, - { + version = "1.1.0-1" + }, { name = "hotpot.nvim", url = "rktjmp/hotpot.nvim", - version = "0.12.1-1", - }, - { + version = "0.12.1-1" + }, { name = "hydra.nvim", url = "nvimtools/hydra.nvim", - version = "1.0.2-1", - }, - { + version = "1.0.2-1" + }, { name = "image.nvim", url = "3rd/image.nvim", - version = "1.3.0-1", - }, - { + version = "1.3.0-1" + }, { name = "incline.nvim", url = "b0o/incline.nvim", - version = "0.0.1-1", - }, - { + version = "0.0.1-1" + }, { name = "indent-blankline.nvim", url = "lukas-reineke/indent-blankline.nvim", - version = "3.6.3-1", - }, - { + version = "3.6.3-1" + }, { name = "kai.nvim", url = "Kamilcuk/kai.nvim", - version = "0.0.6-1", - }, - { + version = "0.0.6-1" + }, { name = "lazy.nvim", url = "folke/lazy.nvim", - version = "11.2.1-1", - }, - { + version = "11.2.1-1" + }, { name = "leetcode.nvim", url = "kawre/leetcode.nvim", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "legendary.nvim", url = "mrjones2014/legendary.nvim", - version = "2.13.11-1", - }, - { + version = "2.13.11-1" + }, { name = "live-command.nvim", url = "smjonas/live-command.nvim", - version = "1.2.1-1", - }, - { + version = "1.2.1-1" + }, { name = "logging.nvim", url = "NTBBloodbath/logging.nvim", - version = "1.1.0-1", - }, - { + version = "1.1.0-1" + }, { name = "love2d.nvim", url = "S1M0N38/love2d.nvim", - version = "0.2-1", - }, - { + version = "0.2-1" + }, { name = "lsp-progress.nvim", url = "linrongbin16/lsp-progress.nvim", - version = "1.0.12-1", - }, - { + version = "1.0.12-1" + }, { name = "lsp_signature.nvim", url = "ray-x/lsp_signature.nvim", - version = "0.3.1-1", - }, - { + version = "0.3.1-1" + }, { name = "lua-obfuscator.nvim", url = "git+ssh://git@github.com/kdssoftware/lua-obfuscator.nvim.git", - version = "1.0.1-1", - }, - { + version = "1.0.1-1" + }, { name = "lua-utils.nvim", url = "nvim-neorg/lua-utils.nvim", - version = "1.0.2-1", - }, - { + version = "1.0.2-1" + }, { name = "mapx.nvim", url = "b0o/mapx.nvim", - version = "0.2.1-1", - }, - { + version = "0.2.1-1" + }, { name = "mason-lspconfig.nvim", url = "williamboman/mason-lspconfig.nvim", - version = "1.29.0-1", - }, - { + version = "1.29.0-1" + }, { name = "mason-nvim-dap.nvim", url = "jay-babu/mason-nvim-dap.nvim", - version = "2.3.0-1", - }, - { + version = "2.3.0-1" + }, { name = "mason.nvim", url = "williamboman/mason.nvim", - version = "1.10.0-1", - }, - { + version = "1.10.0-1" + }, { name = "mini.nvim", url = "echasnovski/mini.nvim", - version = "0.9.0-1", - }, - { + version = "0.9.0-1" + }, { name = "mkdnflow.nvim", url = "jakewvincent/mkdnflow.nvim", - version = "1.2.0-1", - }, - { + version = "1.2.0-1" + }, { name = "move.nvim", url = "fedepujol/move.nvim", - version = "2.0.0-1", - }, - { + version = "2.0.0-1" + }, { name = "multicursors.nvim", url = "smoka7/multicursors.nvim", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "my-awesome-plugin.nvim", url = "S1M0N38/my-awesome-plugin.nvim", - version = "0.1.1-1", - }, - { + version = "0.1.1-1" + }, { name = "navigator.nvim", url = "numToStr/Navigator.nvim", - version = "0.6-1", - }, - { + version = "0.6-1" + }, { name = "neo-tree.nvim", url = "nvim-neo-tree/neo-tree.nvim", - version = "3.26-1", - }, - { + version = "3.26-1" + }, { name = "neoconf.nvim", url = "folke/neoconf.nvim", - version = "1.2.2-1", - }, - { + version = "1.2.2-1" + }, { name = "neodev.nvim", url = "folke/neodev.nvim", - version = "3.0.0-1", - }, - { + version = "3.0.0-1" + }, { name = "neoscroll.nvim", url = "karb94/neoscroll.nvim", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "nightfox.nvim", url = "EdenEast/nightfox.nvim", - version = "3.9.3-1", - }, - { + version = "3.9.3-1" + }, { name = "no-neck-pain.nvim", url = "shortcuts/no-neck-pain.nvim", - version = "1.14.0-1", - }, - { + version = "1.14.0-1" + }, { name = "noice.nvim", url = "folke/noice.nvim", - version = "4.3.0-1", - }, - { + version = "4.3.0-1" + }, { name = "npackages.nvim", url = "diegofigs/npackages.nvim", - version = "0.1.0-1", - }, - { + version = "0.1.0-1" + }, { name = "nui-components.nvim", url = "grapp-dev/nui-components.nvim", - version = "1.5.2-1", - }, - { + version = "1.5.2-1" + }, { name = "nui.nvim", url = "git+https://github.com/MunifTanjim/nui.nvim.git", - version = "0.3.0-1", - }, - { + version = "0.3.0-1" + }, { name = "nvim-client", url = "neovim/lua-client", - version = "0.2.4-1", - }, - { + version = "0.2.4-1" + }, { name = "nvim-client-proxy", url = "hjdivad/nvim-client-proxy", - version = "0.1.0-1", - }, - { + version = "0.1.0-1" + }, { name = "nvim-cmp", url = "hrsh7th/nvim-cmp", - version = "0.0.1-2", - }, - { + version = "0.0.1-2" + }, { name = "nvim-cokeline", url = "willothy/nvim-cokeline", - version = "0.4.0-1", - }, - { + version = "0.4.0-1" + }, { name = "nvim-dap", url = "mfussenegger/nvim-dap", - version = "0.8.0-1", - }, - { + version = "0.8.0-1" + }, { name = "nvim-dap-ui", url = "rcarriga/nvim-dap-ui", - version = "4.0.0-1", - }, - { + version = "4.0.0-1" + }, { name = "nvim-dbee", url = "kndndrj/nvim-dbee", - version = "0.1.6-1", - }, - { + version = "0.1.6-1" + }, { name = "nvim-dev-container", url = "esensar/nvim-dev-container", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "nvim-java", url = "nvim-java/nvim-java", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "nvim-java-core", url = "nvim-java/nvim-java-core", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "nvim-java-dap", url = "nvim-java/nvim-java-dap", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "nvim-jdtls", url = "mfussenegger/nvim-jdtls", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "nvim-jqx", url = "gennaro-tedesco/nvim-jqx", - version = "0.1.4-1", - }, - { + version = "0.1.4-1" + }, { name = "nvim-lastplace", url = "mrcjkb/nvim-lastplace", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "nvim-lightbulb", url = "kosayoda/nvim-lightbulb", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "nvim-lspconfig", url = "neovim/nvim-lspconfig", - version = "0.1.8-1", - }, - { + version = "0.1.8-1" + }, { name = "nvim-metals", url = "scalameta/nvim-metals", - version = "0.9.x-1", - }, - { + version = "0.9.x-1" + }, { name = "nvim-nio", url = "nvim-neotest/nvim-nio", - version = "1.9.4-1", - }, - { + version = "1.9.4-1" + }, { name = "nvim-notify", url = "rcarriga/nvim-notify", - version = "3.13.5-1", - }, - { + version = "3.13.5-1" + }, { name = "nvim-parinfer", url = "gpanders/nvim-parinfer", - version = "1.2.0-1", - }, - { + version = "1.2.0-1" + }, { name = "nvim-peekup", url = "gennaro-tedesco/nvim-peekup", - version = "0.1.1-1", - }, - { + version = "0.1.1-1" + }, { name = "nvim-possession", url = "gennaro-tedesco/nvim-possession", - version = "0.0.13-1", - }, - { + version = "0.0.13-1" + }, { name = "nvim-scrollview", url = "dstein64/nvim-scrollview", - version = "5.1.0-1", - }, - { + version = "5.1.0-1" + }, { name = "nvim-smuggler", url = "Klafyvel/nvim-smuggler", - version = "main-1", - }, - { + version = "main-1" + }, { name = "nvim-snippy", url = "dcampos/nvim-snippy", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "nvim-surround", url = "kylechui/nvim-surround", - version = "2.1.5-1", - }, - { + version = "2.1.5-1" + }, { name = "nvim-tree.lua", url = "nvim-tree/nvim-tree.lua", - version = "1.4.0-1", - }, - { + version = "1.4.0-1" + }, { name = "nvim-treesitter-legacy-api", url = "nvim-treesitter/nvim-treesitter", - version = "0.9.2-1", - }, - { + version = "0.9.2-1" + }, { name = "nvim-ufo", url = "kevinhwang91/nvim-ufo", - version = "1.4.0-1", - }, - { + version = "1.4.0-1" + }, { name = "nvim-web-devicons", url = "nvim-tree/nvim-web-devicons", - version = "0.100-1", - }, - { + version = "0.100-1" + }, { name = "obsidian.nvim", url = "epwalsh/obsidian.nvim", - version = "3.8.0-1", - }, - { + version = "3.8.0-1" + }, { name = "oil.nvim", url = "stevearc/oil.nvim", - version = "2.10.0-1", - }, - { + version = "2.10.0-1" + }, { name = "onedarkpro.nvim", url = "olimorris/onedarkpro.nvim", - version = "0.8.0-1", - }, - { + version = "0.8.0-1" + }, { name = "onenord.nvim", url = "rmehri01/onenord.nvim", - version = "0.7.0-1", - }, - { + version = "0.7.0-1" + }, { name = "otter.nvim", url = "jmbuhr/otter.nvim", - version = "1.15.1-1", - }, - { + version = "1.15.1-1" + }, { name = "overseer.nvim", url = "stevearc/overseer.nvim", - version = "1.4.0-1", - }, - { + version = "1.4.0-1" + }, { name = "oz.nvim", url = "luxluth/oz.nvim", - version = "0.0.3-1", - }, - { + version = "0.0.3-1" + }, { name = "package-info.nvim", url = "vuki656/package-info.nvim", - version = "2.0-1", - }, - { + version = "2.0-1" + }, { name = "paperplanes.nvim", url = "rktjmp/paperplanes.nvim", - version = "0.1.6-1", - }, - { + version = "0.1.6-1" + }, { name = "papis.nvim", url = "jghauser/papis.nvim", - version = "0.5.1-1", - }, - { + version = "0.5.1-1" + }, { name = "paq-nvim", url = "savq/paq-nvim", - version = "2.0.0-1", - }, - { + version = "2.0.0-1" + }, { name = "pathlib.nvim", url = "pysan3/pathlib.nvim", - version = "2.2.2-1", - }, - { + version = "2.2.2-1" + }, { name = "persistence.nvim", url = "folke/persistence.nvim", - version = "2.0.0-1", - }, - { + version = "2.0.0-1" + }, { name = "plenary.nvim", url = "nvim-lua/plenary.nvim", - version = "0.1.4-1", - }, - { + version = "0.1.4-1" + }, { name = "pretty-fold.nvim", url = "anuvyklack/pretty-fold.nvim", - version = "3.0-1", - }, - { + version = "3.0-1" + }, { name = "rainbow-delimiters.nvim", url = "HiPhish/rainbow-delimiters.nvim", - version = "0.4.0-1", - }, - { + version = "0.4.0-1" + }, { name = "renamer.nvim", url = "filipdutescu/renamer.nvim", - version = "5.1.0-1", - }, - { + version = "5.1.0-1" + }, { name = "rest.nvim", url = "rest-nvim/rest.nvim", - version = "2.0.1-1", - }, - { + version = "2.0.1-1" + }, { name = "rocks-config.nvim", url = "nvim-neorocks/rocks-config.nvim", - version = "2.0.1-1", - }, - { + version = "2.1.0-1" + }, { name = "rocks-dev.nvim", url = "nvim-neorocks/rocks-dev.nvim", - version = "1.2.3-1", - }, - { + version = "1.2.3-1" + }, { name = "rocks-git.nvim", url = "nvim-neorocks/rocks-git.nvim", - version = "1.5.1-1", - }, - { + version = "1.5.1-1" + }, { name = "rocks.nvim", url = "nvim-neorocks/rocks.nvim", - version = "2.32.0-1", - }, - { + version = "2.32.0-1" + }, { name = "rtp.nvim", url = "nvim-neorocks/rtp.nvim", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "4.25.1-1", - }, - { + version = "4.25.1-1" + }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "screenkey.nvim", url = "NStefan002/screenkey.nvim", - version = "2.1.0-1", - }, - { + version = "2.1.0-1" + }, { name = "scrollbar.nvim", url = "Xuyuanp/scrollbar.nvim", - version = "0.4.0-1", - }, - { + version = "0.4.0-1" + }, { name = "session.nvim", url = "Kibadda/session.nvim", - version = "2.0.0-1", - }, - { + version = "2.0.0-1" + }, { name = "sg.nvim", url = "sourcegraph/sg.nvim", - version = "1.1.0-1", - }, - { + version = "1.1.0-1" + }, { name = "smart-splits.nvim", url = "mrjones2014/smart-splits.nvim", - version = "1.5.0-1", - }, - { + version = "1.5.0-1" + }, { name = "squirrel.nvim", url = "xiaoshihou514/squirrel.nvim", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "storm-mode.nvim", url = "HoppenR/storm-mode.nvim", - version = "1.2.0-1", - }, - { + version = "1.2.0-1" + }, { name = "structlog.nvim", url = "git+ssh://git@github.com/Tastyep/structlog.nvim.git", - version = "0.1-1", - }, - { + version = "0.1-1" + }, { name = "substitute.nvim", url = "gbprod/substitute.nvim", - version = "2.0.0-1", - }, - { + version = "2.0.0-1" + }, { name = "sweetie.nvim", url = "NTBBloodbath/sweetie.nvim", - version = "3.1.1-1", - }, - { + version = "3.1.1-1" + }, { name = "tabby.nvim", url = "nanozuki/tabby.nvim", - version = "2.5.1-1", - }, - { + version = "2.5.1-1" + }, { name = "telescope-zf-native.nvim", url = "natecraddock/telescope-zf-native.nvim", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "telescope.nvim", url = "nvim-telescope/telescope.nvim", - version = "0.1.8-1", - }, - { + version = "0.1.8-1" + }, { name = "todo-comments.nvim", url = "folke/todo-comments.nvim", - version = "1.2.0-1", - }, - { + version = "1.2.0-1" + }, { name = "toggleterm.nvim", url = "akinsho/toggleterm.nvim", - version = "2.11.0-1", - }, - { + version = "2.11.0-1" + }, { name = "tokyonight.nvim", url = "folke/tokyonight.nvim", - version = "3.0.1-1", - }, - { + version = "3.0.1-1" + }, { name = "trouble.nvim", url = "folke/trouble.nvim", - version = "3.4.3-1", - }, - { + version = "3.4.3-1" + }, { name = "tsc.nvim", url = "dmmulroy/tsc.nvim", - version = "2.3.0-1", - }, - { + version = "2.3.0-1" + }, { name = "twilight.nvim", url = "folke/twilight.nvim", - version = "1.0.0-1", - }, - { + version = "1.0.0-1" + }, { name = "unimpaired.nvim", url = "tummetott/unimpaired.nvim", - version = "0.2.0-1", - }, - { + version = "0.2.0-1" + }, { name = "vgit.nvim", url = "tanvirtin/vgit.nvim", - version = "0.2.2-1", - }, - { + version = "0.2.2-1" + }, { name = "which-key.nvim", url = "folke/which-key.nvim", - version = "2.1.0-1", - }, - { + version = "2.1.0-1" + }, { name = "windline.nvim", url = "windwp/windline.nvim", - version = "1.1.0-1", - }, - { + version = "1.1.0-1" + }, { name = "yanky.nvim", url = "gbprod/yanky.nvim", - version = "2.0.0-1", - }, - { + version = "2.0.0-1" + }, { name = "yazi.nvim", url = "mikavilpas/yazi.nvim", - version = "master-1", - }, - { + version = "master-1" + }, { name = "zen-mode.nvim", url = "folke/zen-mode.nvim", - version = "1.3.0-1", - }, - { + version = "1.3.0-1" + }, { name = "zk-nvim", url = "zk-org/zk-nvim", - version = "0.1.0-1", - }, -} - + version = "0.1.0-1" + } } \ No newline at end of file From 8abfed457c5b7b7435b0a74ca6d2f718c1df0741 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 17:42:45 +0200 Subject: [PATCH 577/815] test: fix tests --- tests/manage/semver_spec.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/manage/semver_spec.lua b/tests/manage/semver_spec.lua index 3b96d99..02036c5 100644 --- a/tests/manage/semver_spec.lua +++ b/tests/manage/semver_spec.lua @@ -14,6 +14,7 @@ describe("semver version", function() ["1.2.3+build"] = { major = 1, minor = 2, patch = 3, build = "build" }, } for input, output in pairs(tests) do + output.input = input it("correctly parses " .. input, function() assert.same(output, v(input)) end) From 88911547e705579ddff57d4b7e5a77a8557a2459 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 17:48:04 +0200 Subject: [PATCH 578/815] ci: fix some github urls --- lua/lazy/build.lua | 5 +++-- lua/lazy/community/rocks.lua | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lua/lazy/build.lua b/lua/lazy/build.lua index 83993aa..c30c809 100644 --- a/lua/lazy/build.lua +++ b/lua/lazy/build.lua @@ -68,10 +68,11 @@ function M.build() if rockspec then local url = rockspec.source and rockspec.source.url -- parse github short url - if url and url:find("^%a+://github.com/") then - url = url:gsub("^%a+://github.com/", "") + if url and url:find("://github.com/") then + url = url:gsub("^.*://github.com/", "") local parts = vim.split(url, "/") url = parts[1] .. "/" .. parts[2] + url = url:gsub("%.git$", "") end if url then rock.url = url diff --git a/lua/lazy/community/rocks.lua b/lua/lazy/community/rocks.lua index a16b088..30dc305 100644 --- a/lua/lazy/community/rocks.lua +++ b/lua/lazy/community/rocks.lua @@ -373,7 +373,7 @@ return version = "1.5.2-1" }, { name = "nui.nvim", - url = "git+https://github.com/MunifTanjim/nui.nvim.git", + url = "MunifTanjim/nui.nvim", version = "0.3.0-1" }, { name = "nvim-client", @@ -570,7 +570,7 @@ return }, { name = "rocks-config.nvim", url = "nvim-neorocks/rocks-config.nvim", - version = "2.1.0-1" + version = "2.0.1-1" }, { name = "rocks-dev.nvim", url = "nvim-neorocks/rocks-dev.nvim", From 786a3febc01c31a98163232ab75175e7e8045c7d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 25 Jun 2024 15:48:19 +0000 Subject: [PATCH 579/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/rocks.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/community/rocks.lua b/lua/lazy/community/rocks.lua index 30dc305..07d5225 100644 --- a/lua/lazy/community/rocks.lua +++ b/lua/lazy/community/rocks.lua @@ -570,7 +570,7 @@ return }, { name = "rocks-config.nvim", url = "nvim-neorocks/rocks-config.nvim", - version = "2.0.1-1" + version = "2.1.0-1" }, { name = "rocks-dev.nvim", url = "nvim-neorocks/rocks-dev.nvim", From 49c0b86a6f831972972a1acc5590c2eb365dcef5 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 18:07:26 +0200 Subject: [PATCH 580/815] ci: move to _generated.lua --- lua/lazy/build.lua | 2 +- .../community/{rocks.lua => _generated.lua} | 0 lua/lazy/community/init.lua | 25 +++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) rename lua/lazy/community/{rocks.lua => _generated.lua} (100%) create mode 100644 lua/lazy/community/init.lua diff --git a/lua/lazy/build.lua b/lua/lazy/build.lua index c30c809..f61589e 100644 --- a/lua/lazy/build.lua +++ b/lua/lazy/build.lua @@ -83,7 +83,7 @@ function M.build() end end end - Util.write_file("lua/lazy/community/rocks.lua", "return \n" .. vim.inspect(nvim_rocks)) + Util.write_file("lua/lazy/community/_generated.lua", "return \n" .. vim.inspect(nvim_rocks)) end M.build() diff --git a/lua/lazy/community/rocks.lua b/lua/lazy/community/_generated.lua similarity index 100% rename from lua/lazy/community/rocks.lua rename to lua/lazy/community/_generated.lua diff --git a/lua/lazy/community/init.lua b/lua/lazy/community/init.lua new file mode 100644 index 0000000..4e762ec --- /dev/null +++ b/lua/lazy/community/init.lua @@ -0,0 +1,25 @@ +local M = {} + +---@type table +local mapping = nil + +local function _load() + if mapping then + return + end + mapping = {} + ---@type {name:string, url:string, version:string}[] + local gen = require("lazy.community._generated") + for _, rock in ipairs(gen) do + mapping[rock.name] = rock.url + end +end + +---@param rock string +---@return string? +function M.get_url(rock) + _load() + return mapping[rock] +end + +return M From 7cda552c1cd09ec7019960d8d58fd0162bdf1340 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 18:12:39 +0200 Subject: [PATCH 581/815] ci: more rockspec patterns --- lua/lazy/build.lua | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lua/lazy/build.lua b/lua/lazy/build.lua index f61589e..c56cbdb 100644 --- a/lua/lazy/build.lua +++ b/lua/lazy/build.lua @@ -5,6 +5,8 @@ local Util = require("lazy.util") local M = {} +M.patterns = { "nvim", "treesitter", "tree-sitter" } + function M.fetch(url, file, prefix) if not vim.uv.fs_stat(file) then print((prefix or "") .. "Fetching " .. url .. " to " .. file .. "\n") @@ -36,7 +38,14 @@ function M.build() ---@type {name:string, version:string, url:string}[] local nvim_rocks = {} for rock, vv in pairs(manifest.repository or {}) do - if rock:find("nvim", 1, true) then + local matches = false + for _, pattern in ipairs(M.patterns) do + if rock:find(pattern, 1, true) then + matches = true + break + end + end + if matches then local versions = vim.tbl_map(Semver.version, vim.tbl_keys(vv)) versions = vim.tbl_filter(function(v) return not not v From 33be7ac3173c7c20b94ce7e1b9734c1a1e85f292 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 25 Jun 2024 16:13:21 +0000 Subject: [PATCH 582/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index 07d5225..8e5aaad 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -287,14 +287,26 @@ return name = "lsp_signature.nvim", url = "ray-x/lsp_signature.nvim", version = "0.3.1-1" + }, { + name = "ltreesitter", + url = "euclidianAce/ltreesitter", + version = "0.0.7-1" }, { name = "lua-obfuscator.nvim", url = "git+ssh://git@github.com/kdssoftware/lua-obfuscator.nvim.git", version = "1.0.1-1" + }, { + name = "lua-tree-sitter", + url = "xcb-xwii/lua-tree-sitter", + version = "0.1.0-1" }, { name = "lua-utils.nvim", url = "nvim-neorg/lua-utils.nvim", version = "1.0.2-1" + }, { + name = "luarocks-build-treesitter-parser", + url = "nvim-neorocks/luarocks-build-treesitter-parser", + version = "4.1.0-1" }, { name = "mapx.nvim", url = "b0o/mapx.nvim", @@ -659,6 +671,18 @@ return name = "tokyonight.nvim", url = "folke/tokyonight.nvim", version = "3.0.1-1" + }, { + name = "tree-sitter-norg", + url = "nvim-neorg/tree-sitter-norg", + version = "0.2.4-1" + }, { + name = "tree-sitter-norg-meta", + url = "nvim-neorg/tree-sitter-norg-meta", + version = "0.1.0-1" + }, { + name = "tree-sitter-orgmode", + url = "nvim-orgmode/tree-sitter-org", + version = "1.3.2-1" }, { name = "trouble.nvim", url = "folke/trouble.nvim", From aff65371fc0d145c42bc58732242cd9a52ab83bb Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 20:35:27 +0200 Subject: [PATCH 583/815] ci: add `cmp` to generated luarock mappings --- lua/lazy/build.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/build.lua b/lua/lazy/build.lua index c56cbdb..e8ed7d8 100644 --- a/lua/lazy/build.lua +++ b/lua/lazy/build.lua @@ -5,7 +5,7 @@ local Util = require("lazy.util") local M = {} -M.patterns = { "nvim", "treesitter", "tree-sitter" } +M.patterns = { "nvim", "treesitter", "tree-sitter", "cmp" } function M.fetch(url, file, prefix) if not vim.uv.fs_stat(file) then From aff7ee8e8983947abab94a37aa3eec57f6fc3f6b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 25 Jun 2024 18:35:51 +0000 Subject: [PATCH 584/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index 8e5aaad..9e583e9 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -39,6 +39,10 @@ return name = "ci-template.nvim", url = "linrongbin16/ci-template.nvim", version = "8.1.0-1" + }, { + name = "cmp-rg", + url = "lukas-reineke/cmp-rg", + version = "1.3.9-1" }, { name = "colorbox.nvim", url = "linrongbin16/colorbox.nvim", From 25981e1f3927ee0b22aefea122ebac1cddafdca6 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 20:38:16 +0200 Subject: [PATCH 585/815] fix(meta): only tag new top-level pkg fragment as optional --- lua/lazy/core/meta.lua | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index ec3a5b4..52b0549 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -34,13 +34,16 @@ function M:load_pkgs() return end for _, pkg in ipairs(Pkg.get()) do + local last_id = self.fragments._fid local meta, fragment = self:add(pkg.spec) if meta and fragment then meta._.pkg = pkg - -- tag all package fragments as optional + -- tag all top-level package fragments that were added as optional for _, fid in ipairs(meta._.frags) do - local frag = self.fragments:get(fid) - frag.spec.optional = true + if fid > last_id then + local frag = self.fragments:get(fid) + frag.spec.optional = true + end end -- keep track of the top-level package fragment self.pkgs[pkg.dir] = fragment.id From be74a8a535fea6a480143fb52b4d6958d9e2da94 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 20:38:50 +0200 Subject: [PATCH 586/815] feat(pkg): utils to get rock to url mappings --- lua/lazy/community/init.lua | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lua/lazy/community/init.lua b/lua/lazy/community/init.lua index 4e762ec..1cd20e8 100644 --- a/lua/lazy/community/init.lua +++ b/lua/lazy/community/init.lua @@ -3,23 +3,22 @@ local M = {} ---@type table local mapping = nil -local function _load() - if mapping then - return - end - mapping = {} - ---@type {name:string, url:string, version:string}[] - local gen = require("lazy.community._generated") - for _, rock in ipairs(gen) do - mapping[rock.name] = rock.url +local function load() + if not mapping then + mapping = {} + ---@type {name:string, url:string, version:string}[] + local gen = require("lazy.community._generated") + for _, rock in ipairs(gen) do + mapping[rock.name] = rock.url + end end + return mapping end ---@param rock string ---@return string? function M.get_url(rock) - _load() - return mapping[rock] + return load()[rock] end return M From 6b8bf58ebf9114f8f31fb78cbf057e452cb0e540 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 20:53:42 +0200 Subject: [PATCH 587/815] feat(rocks): simple rockspecs are now fully resolved by lazy without luarocks. See #1548 --- lua/lazy/community/init.lua | 4 ++ lua/lazy/community/specs.lua | 7 +++ lua/lazy/core/plugin.lua | 2 +- lua/lazy/pkg/init.lua | 2 +- lua/lazy/pkg/rockspec.lua | 97 +++++++++++++++++++++++++----------- 5 files changed, 80 insertions(+), 32 deletions(-) create mode 100644 lua/lazy/community/specs.lua diff --git a/lua/lazy/community/init.lua b/lua/lazy/community/init.lua index 1cd20e8..f7db48f 100644 --- a/lua/lazy/community/init.lua +++ b/lua/lazy/community/init.lua @@ -21,4 +21,8 @@ function M.get_url(rock) return load()[rock] end +function M.get_spec(name) + return require("lazy.community.specs")[name] +end + return M diff --git a/lua/lazy/community/specs.lua b/lua/lazy/community/specs.lua new file mode 100644 index 0000000..ea16591 --- /dev/null +++ b/lua/lazy/community/specs.lua @@ -0,0 +1,7 @@ +---@type table +return { + ["plenary.nvim"] = { + "nvim-lua/plenary.nvim", + lazy = true, + }, +} diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 8c746a9..a806b0a 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -287,7 +287,7 @@ function M.find_local_spec() return end local path = vim.uv.cwd() - while path ~= "" do + while path and path ~= "" do local file = path .. "/" .. M.LOCAL_SPEC if vim.fn.filereadable(file) == 1 then return { diff --git a/lua/lazy/pkg/init.lua b/lua/lazy/pkg/init.lua index b9620ca..7b52da1 100644 --- a/lua/lazy/pkg/init.lua +++ b/lua/lazy/pkg/init.lua @@ -2,7 +2,7 @@ local Config = require("lazy.core.config") local Util = require("lazy.core.util") local M = {} -M.VERSION = 10 +M.VERSION = 12 M.dirty = false ---@class LazyPkg diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index ef6d804..7d46034 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -1,4 +1,6 @@ --# selene:allow(incorrect_standard_library_use) +local Community = require("lazy.community") + local Config = require("lazy.core.config") local Health = require("lazy.health") local Util = require("lazy.util") @@ -16,11 +18,11 @@ local Util = require("lazy.util") local M = {} -M.dev_suffix = "-1.rockspec" M.skip = { "lua" } M.rewrites = { ["plenary.nvim"] = { "nvim-lua/plenary.nvim", lazy = true }, } + M.python = { "python3", "python" } ---@class HereRocks @@ -151,6 +153,15 @@ function M.build(task) end end + local pkg = task.plugin._.pkg + assert(pkg, "missing rockspec pkg for " .. task.plugin.name .. "\nThis shouldn't happen, please report.") + + local rockspec = M.rockspec(task.plugin.dir .. "/" .. pkg.file) or {} + assert( + rockspec.package, + "missing rockspec package name for " .. task.plugin.name .. "\nThis shouldn't happen, please report." + ) + local root = Config.options.rocks.root .. "/" .. task.plugin.name task:spawn(luarocks, { args = { @@ -161,8 +172,11 @@ function M.build(task) "--dev", "--lua-version", "5.1", - "make", + "install", -- use install so that we can make use of pre-built rocks "--force-fast", + "--deps-mode", + "one", + rockspec.package, }, cwd = task.plugin.dir, env = env, @@ -192,31 +206,36 @@ function M.rockspec(file) return M.parse(file) end +---@param plugin LazyPlugin +function M.find_rockspec(plugin) + local rockspec_file ---@type string? + Util.ls(plugin.dir, function(path, name, t) + if t == "file" then + for _, suffix in ipairs({ "scm", "git", "dev" }) do + suffix = suffix .. "-1.rockspec" + if name:sub(-#suffix) == suffix then + rockspec_file = path + return false + end + end + end + end) + return rockspec_file +end + ---@param plugin LazyPlugin ---@return LazyPkgSpec? function M.get(plugin) - if M.rewrites[plugin.name] then + if Community.get_spec(plugin.name) then return { - file = "rewrite", + file = "community", source = "lazy", - spec = M.rewrites[plugin.name], + spec = Community.get_spec(plugin.name), } end - local rockspec_file ---@type string? - Util.ls(plugin.dir, function(path, name, t) - if t == "file" and name:sub(-#M.dev_suffix) == M.dev_suffix then - rockspec_file = path - return false - end - end) - - if not rockspec_file then - return - end - - local rockspec = M.rockspec(rockspec_file) - + local rockspec_file = M.find_rockspec(plugin) + local rockspec = rockspec_file and M.rockspec(rockspec_file) if not rockspec then return end @@ -224,20 +243,34 @@ function M.get(plugin) local has_lua = not not vim.uv.fs_stat(plugin.dir .. "/lua") ---@type LazyPluginSpec - local rewrites = {} + local specs = {} ---@param dep string local rocks = vim.tbl_filter(function(dep) local name = dep:gsub("%s.*", "") - if M.rewrites[name] then - table.insert(rewrites, M.rewrites[name]) + local url = Community.get_url(name) + local spec = Community.get_spec(name) + + if spec then + -- community spec + table.insert(specs, spec) + return false + elseif url then + -- Neovim plugin rock + table.insert(specs, { url, lazy = true }) return false end return not vim.tbl_contains(M.skip, name) end, rockspec.dependencies or {}) - local use = not has_lua + local use = + -- package without a /lua directory + not has_lua + -- has dependencies that are not skipped, + -- not in community specs, + -- and don't have a rockspec mapping or #rocks > 0 + -- has a complex build process or ( rockspec.build and rockspec.build.build_type @@ -246,13 +279,17 @@ function M.get(plugin) ) if not use then - if #rewrites > 0 then - return { - file = vim.fn.fnamemodify(rockspec_file, ":t"), - spec = rewrites, - } - end - return + -- community specs only + return #specs > 0 + and { + file = vim.fn.fnamemodify(rockspec_file, ":t"), + spec = { + plugin.name, + specs = specs, + build = false, + }, + } + or nil end local lazy = nil From 9ac375653bbb1f8d91e8f20b238f4f754006a241 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 21:05:40 +0200 Subject: [PATCH 588/815] chore(main): release 11.4.0 (#1554) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 6d2ee11..8af0208 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.3.0" + ".": "11.4.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 028f5ab..f53dbe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [11.4.0](https://github.com/folke/lazy.nvim/compare/v11.3.0...v11.4.0) (2024-06-25) + + +### Features + +* **pkg:** utils to get rock to url mappings ([be74a8a](https://github.com/folke/lazy.nvim/commit/be74a8a535fea6a480143fb52b4d6958d9e2da94)) +* **rocks:** simple rockspecs are now fully resolved by lazy without luarocks. See [#1548](https://github.com/folke/lazy.nvim/issues/1548) ([6b8bf58](https://github.com/folke/lazy.nvim/commit/6b8bf58ebf9114f8f31fb78cbf057e452cb0e540)) + + +### Bug Fixes + +* **meta:** only tag new top-level pkg fragment as optional ([25981e1](https://github.com/folke/lazy.nvim/commit/25981e1f3927ee0b22aefea122ebac1cddafdca6)) + ## [11.3.0](https://github.com/folke/lazy.nvim/compare/v11.2.1...v11.3.0) (2024-06-25) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 6e23b21..cf639f6 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -197,7 +197,7 @@ M.defaults = { debug = false, } -M.version = "11.3.0" -- x-release-please-version +M.version = "11.4.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 0d9fd636beb9e3783edcdba2b31932280bdc05f7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 21:15:50 +0200 Subject: [PATCH 589/815] fix(health): show what plugins need luarocks and if none, use warnings instead of errors. See #1551 --- lua/lazy/health.lua | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 3199f75..86e805d 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -129,7 +129,26 @@ function M.check() else info("checking `luarocks` installation") end - require("lazy.pkg.rockspec").check({ error = error, warn = warn, ok = ok }) + local need_luarocks = {} + for _, plugin in pairs(spec.plugins) do + if plugin.build == "rockspec" then + table.insert(need_luarocks, plugin.name) + end + end + if #need_luarocks == 0 then + ok("no plugins require `luarocks`, so you can ignore any warnings below") + else + local lines = vim.tbl_map(function(name) + return " * `" .. name .. "`" + end, need_luarocks) + + info("you have some plugins that require `luarocks`:\n" .. table.concat(lines, "\n")) + end + require("lazy.pkg.rockspec").check({ + error = #need_luarocks > 0 and error or warn, + warn = warn, + ok = ok, + }) else ok("luarocks disabled") end From 3f7368c3ac0c3683030b37aafeb50c54957bd610 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Jun 2024 21:53:56 +0200 Subject: [PATCH 590/815] ci: use 5.1 manifest --- lua/lazy/build.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/build.lua b/lua/lazy/build.lua index e8ed7d8..5280c31 100644 --- a/lua/lazy/build.lua +++ b/lua/lazy/build.lua @@ -22,7 +22,7 @@ end ---@return RockManifest? function M.fetch_manifest() local manifest_file = "build/manifest.lua" - M.fetch("https://luarocks.org/manifest", manifest_file) + M.fetch("https://luarocks.org/manifest-5.1", manifest_file) return Rocks.parse(manifest_file) end From 69041bccb70f68408633e93ed33012ee18889bb0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Jun 2024 22:09:17 +0200 Subject: [PATCH 591/815] chore(main): release 11.4.1 (#1555) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 8af0208..8aab173 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.4.0" + ".": "11.4.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index f53dbe9..741e766 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.4.1](https://github.com/folke/lazy.nvim/compare/v11.4.0...v11.4.1) (2024-06-25) + + +### Bug Fixes + +* **health:** show what plugins need luarocks and if none, use warnings instead of errors. See [#1551](https://github.com/folke/lazy.nvim/issues/1551) ([0d9fd63](https://github.com/folke/lazy.nvim/commit/0d9fd636beb9e3783edcdba2b31932280bdc05f7)) + ## [11.4.0](https://github.com/folke/lazy.nvim/compare/v11.3.0...v11.4.0) (2024-06-25) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index cf639f6..daa9ce3 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -197,7 +197,7 @@ M.defaults = { debug = false, } -M.version = "11.4.0" -- x-release-please-version +M.version = "11.4.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 67e1e8e6a3a8b80357991a5bf58810eb7afa257d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 06:22:21 +0200 Subject: [PATCH 592/815] ci: added neo to rockspec patterns --- lua/lazy/build.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/build.lua b/lua/lazy/build.lua index 5280c31..505ce15 100644 --- a/lua/lazy/build.lua +++ b/lua/lazy/build.lua @@ -5,7 +5,7 @@ local Util = require("lazy.util") local M = {} -M.patterns = { "nvim", "treesitter", "tree-sitter", "cmp" } +M.patterns = { "nvim", "treesitter", "tree-sitter", "cmp", "neo" } function M.fetch(url, file, prefix) if not vim.uv.fs_stat(file) then From 6d60dc3c05440f9f79c738058af62c333543329b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 26 Jun 2024 04:22:43 +0000 Subject: [PATCH 593/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index 9e583e9..87b46dd 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -363,10 +363,34 @@ return name = "neodev.nvim", url = "folke/neodev.nvim", version = "3.0.0-1" + }, { + name = "neogen", + url = "danymat/neogen", + version = "2.17.1-1" + }, { + name = "neogit", + url = "NeogitOrg/neogit", + version = "1.0.0-1" + }, { + name = "neorg", + url = "nvim-neorg/neorg", + version = "8.7.1-1" + }, { + name = "neorg-telescope", + url = "nvim-neorg/neorg-telescope", + version = "1.1.0-1" }, { name = "neoscroll.nvim", url = "karb94/neoscroll.nvim", version = "0.2.0-1" + }, { + name = "neotest", + url = "nvim-neotest/neotest", + version = "5.3.3-1" + }, { + name = "neotest-haskell", + url = "mrcjkb/neotest-haskell", + version = "2.0.0-1" }, { name = "nightfox.nvim", url = "EdenEast/nightfox.nvim", From 28e435b7f34eecd8b90bc87ac71c70b79fcb03b3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 07:14:42 +0200 Subject: [PATCH 594/815] fix(git): fetch commit from origin or local to check if branch was changed. See #1549 --- lua/lazy/manage/task/git.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 8dd2536..56d2b73 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -127,7 +127,7 @@ M.branch = { return true end local branch = assert(Git.get_branch(plugin)) - return Git.get_commit(plugin.dir, branch) + return Git.get_commit(plugin.dir, branch, true) end, run = function(self) local args = { From e79805d706f815a62467260cb307844c368c3dba Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 07:15:04 +0200 Subject: [PATCH 595/815] fix(ui): don't show output when it's the same as error --- lua/lazy/view/render.lua | 44 ++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 61faca1..a2c33c1 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -472,7 +472,7 @@ function M:tasks(plugin) if not task.error and not task.warn and task.name == "log" then self:log(task) end - if self.view:is_selected(plugin) or (task.error or task.warn) then + if (self.view:is_selected(plugin) or (task.error or task.warn)) and task.output ~= task.error then self:markdown(vim.trim(task.output), "LazyTaskOutput", { indent = 6 }) end end @@ -485,27 +485,31 @@ function M:log(task) local lines = vim.split(log, "\n") for _, line in ipairs(lines) do local ref, msg, time = line:match("^(%w+) (.*) (%(.*%))$") - if msg:find("^%S+!:") then - self:diagnostic({ message = "Breaking Changes", severity = vim.diagnostic.severity.WARN }) - end - self:append(ref:sub(1, 7) .. " ", "LazyCommit", { indent = 6 }) - - local dimmed = false - for _, dim in ipairs(ViewConfig.dimmed_commits) do - if msg:find("^" .. dim) then - dimmed = true + if msg then + if msg:find("^%S+!:") then + self:diagnostic({ message = "Breaking Changes", severity = vim.diagnostic.severity.WARN }) end + self:append(ref:sub(1, 7) .. " ", "LazyCommit", { indent = 6 }) + + local dimmed = false + for _, dim in ipairs(ViewConfig.dimmed_commits) do + if msg:find("^" .. dim) then + dimmed = true + end + end + self:append(vim.trim(msg), dimmed and "LazyDimmed" or nil):highlight({ + ["#%d+"] = "LazyCommitIssue", + ["^%S+:"] = dimmed and "Bold" or "LazyCommitType", + ["^%S+(%(.*%))!?:"] = "LazyCommitScope", + ["`.-`"] = "@markup.raw.markdown_inline", + ["%*.-%*"] = "Italic", + ["%*%*.-%*%*"] = "Bold", + }) + self:append(" " .. time, "LazyComment") + self:nl() + -- else + -- self:append(line, "LazyTaskOutput", { indent = 6 }):nl() end - self:append(vim.trim(msg), dimmed and "LazyDimmed" or nil):highlight({ - ["#%d+"] = "LazyCommitIssue", - ["^%S+:"] = dimmed and "Bold" or "LazyCommitType", - ["^%S+(%(.*%))!?:"] = "LazyCommitScope", - ["`.-`"] = "@markup.raw.markdown_inline", - ["%*.-%*"] = "Italic", - ["%*%*.-%*%*"] = "Bold", - }) - self:append(" " .. time, "LazyComment") - self:nl() end self:nl() end From d63e80bae98f42eeb61fa0c21165443bebbb0f2e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 07:18:07 +0200 Subject: [PATCH 596/815] test: remove debug output --- tests/core/plugin_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index 4a09bb9..f922d4b 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -296,7 +296,7 @@ describe("plugin spec opt", function() assert(#spec.notifs == 0) assert(vim.tbl_count(spec.plugins) == 1) Handler.resolve(spec.plugins.bar) - vim.print(spec.plugins.bar._.handlers) + -- vim.print(spec.plugins.bar._.handlers) local events = vim.tbl_keys(spec.plugins.bar._.handlers.event or {}) assert(type(events) == "table") assert(#events == 2) From 473361139cc05936cd5afb08ab68e5bee1ebb5b3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 08:49:42 +0200 Subject: [PATCH 597/815] fix(rockspec): dont lazy-load rock deps --- lua/lazy/pkg/rockspec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 7d46034..02c6155 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -257,7 +257,7 @@ function M.get(plugin) return false elseif url then -- Neovim plugin rock - table.insert(specs, { url, lazy = true }) + table.insert(specs, { url }) return false end return not vim.tbl_contains(M.skip, name) From aa1c9572aa1916e582f9b9c3d43e272b4f23b326 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 08:50:06 +0200 Subject: [PATCH 598/815] fix(rocks): build.type instead of build.build_type --- lua/lazy/pkg/rockspec.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 02c6155..2cae8a5 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -10,7 +10,7 @@ local Util = require("lazy.util") ---@field package string ---@field version string ---@field dependencies string[] ----@field build? {build_type?: string, modules?: any[]} +---@field build? {type?: string, modules?: any[]} ---@field source? {url?: string} ---@class RockManifest @@ -273,9 +273,9 @@ function M.get(plugin) -- has a complex build process or ( rockspec.build - and rockspec.build.build_type - and rockspec.build.build_type ~= "none" - and not (rockspec.build.build_type == "builtin" and not rockspec.build.modules) + and rockspec.build.type + and rockspec.build.type ~= "none" + and not (rockspec.build.type == "builtin" and not rockspec.build.modules) ) if not use then From 2aa8e061f22579b0cabc74f05a90f7344d92195c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 11:10:43 +0200 Subject: [PATCH 599/815] fix(config): dont start checker/change_detection when running headless --- lua/lazy/core/config.lua | 60 ++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index daa9ce3..b7f9c73 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -272,10 +272,6 @@ function M.setup(opts) M.mapleader = vim.g.mapleader M.maplocalleader = vim.g.maplocalleader - if M.headless() then - require("lazy.view.commands").setup() - end - vim.api.nvim_create_autocmd("UIEnter", { once = true, callback = function() @@ -283,33 +279,37 @@ function M.setup(opts) end, }) - vim.api.nvim_create_autocmd("User", { - pattern = "VeryLazy", - once = true, - callback = function() - require("lazy.view.commands").setup() - if M.options.change_detection.enabled then - require("lazy.manage.reloader").enable() - end - if M.options.checker.enabled then - vim.defer_fn(function() - require("lazy.manage.checker").start() - end, 10) - end + if M.headless() then + require("lazy.view.commands").setup() + else + vim.api.nvim_create_autocmd("User", { + pattern = "VeryLazy", + once = true, + callback = function() + require("lazy.view.commands").setup() + if M.options.change_detection.enabled then + require("lazy.manage.reloader").enable() + end + if M.options.checker.enabled then + vim.defer_fn(function() + require("lazy.manage.checker").start() + end, 10) + end - -- useful for plugin developers when making changes to a packspec file - vim.api.nvim_create_autocmd("BufWritePost", { - pattern = { "lazy.lua", "pkg.json", "*.rockspec" }, - callback = function() - require("lazy").pkg({ - plugins = { - require("lazy.core.plugin").find(vim.uv.cwd() .. "/lua/"), - }, - }) - end, - }) - end, - }) + -- useful for plugin developers when making changes to a packspec file + vim.api.nvim_create_autocmd("BufWritePost", { + pattern = { "lazy.lua", "pkg.json", "*.rockspec" }, + callback = function() + require("lazy").pkg({ + plugins = { + require("lazy.core.plugin").find(vim.uv.cwd() .. "/lua/"), + }, + }) + end, + }) + end, + }) + end Util.very_lazy() end From 90e14d158550faab7a410e7c19a6f4044aba572d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 11:11:00 +0200 Subject: [PATCH 600/815] refactor(rocks): is_simple_build --- lua/lazy/pkg/rockspec.lua | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 2cae8a5..2eca5bd 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -183,6 +183,12 @@ function M.build(task) }) end +---@param rockspec RockSpec +function M.is_simple_build(rockspec) + local type = vim.tbl_get(rockspec, "build", "type") + return type == nil or type == "none" or (type == "builtin" and not rockspec.build.modules) +end + ---@param file string ---@return table? function M.parse(file) @@ -271,12 +277,7 @@ function M.get(plugin) -- and don't have a rockspec mapping or #rocks > 0 -- has a complex build process - or ( - rockspec.build - and rockspec.build.type - and rockspec.build.type ~= "none" - and not (rockspec.build.type == "builtin" and not rockspec.build.modules) - ) + or not M.is_simple_build(rockspec) if not use then -- community specs only From 707e2e923b341d280f6cc4546715c37fb04da9cb Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 11:11:11 +0200 Subject: [PATCH 601/815] test: fix init test --- tests/core/init_spec.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/core/init_spec.lua b/tests/core/init_spec.lua index 3a1b4c7..4970871 100644 --- a/tests/core/init_spec.lua +++ b/tests/core/init_spec.lua @@ -1,7 +1,11 @@ +---@module 'luassert' +local Util = require("lazy.core.util") + describe("init", function() it("has correct environment for tests", function() - for _, path in ipairs({ "config", "data", "cache", "state" }) do - assert(vim.fn.stdpath(path):find(".tests/" .. path)) + for _, name in ipairs({ "config", "data", "cache", "state" }) do + local path = Util.norm(vim.fn.stdpath(name) --[[@as string]]) + assert(path:find(".tests/" .. name, 1, true), path .. " not in .tests") end end) end) From 64fd34672815726b60f11a06eb6889b2f5e46b14 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 11:25:04 +0200 Subject: [PATCH 602/815] test: cleanup --- tests/core/e2e_spec.lua | 39 -------------------------------------- tests/core/plugin_spec.lua | 6 ++---- 2 files changed, 2 insertions(+), 43 deletions(-) delete mode 100644 tests/core/e2e_spec.lua diff --git a/tests/core/e2e_spec.lua b/tests/core/e2e_spec.lua deleted file mode 100644 index 37cdca5..0000000 --- a/tests/core/e2e_spec.lua +++ /dev/null @@ -1,39 +0,0 @@ -local Git = require("lazy.manage.git") - -describe("lazy", function() - before_each(function() - vim.g.lazy_did_setup = false - vim.go.loadplugins = true - for modname in pairs(package.loaded) do - if modname:find("lazy") == 1 then - package.loaded[modname] = nil - end - end - end) - - local root = ".tests/data/nvim/lazy" - - it("installs plugins", function() - local Lazy = require("lazy") - local Config = require("lazy.core.config") - - local neodev = false - Lazy.setup({ - { - "folke/neodev.nvim", - config = function() - neodev = true - end, - }, - "folke/paint.nvim", - }, { install_missing = true, defaults = { lazy = true } }) - assert(3 == vim.tbl_count(Config.plugins)) - assert(vim.uv.fs_stat(root .. "/paint.nvim/README.md")) - assert(vim.uv.fs_stat(root .. "/neodev.nvim/README.md")) - assert(not neodev) - assert(Config.plugins["neodev.nvim"]._.installed) - assert(not Config.plugins["neodev.nvim"]._.is_local) - assert.equal("https://github.com/folke/neodev.nvim.git", Git.get_origin(Config.plugins["neodev.nvim"].dir)) - assert.equal("https://github.com/folke/paint.nvim.git", Git.get_origin(Config.plugins["paint.nvim"].dir)) - end) -end) diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index f922d4b..87cea77 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -1,11 +1,9 @@ +---@module 'luassert' + local Config = require("lazy.core.config") local Handler = require("lazy.core.handler") local Plugin = require("lazy.core.plugin") -local assert = require("luassert") - -Config.setup() - local function inspect(obj) return vim.inspect(obj):gsub("%s+", " ") end From 36952153ecb5b196c74e2d9a28eb0e01a9eb02fe Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 14:28:22 +0200 Subject: [PATCH 603/815] perf(util): improve impl of throttle --- lua/lazy/util.lua | 34 ++++++++++++++++------------------ lua/lazy/view/init.lua | 5 ++++- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 813b4d9..09e4f54 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -74,27 +74,25 @@ end ---@return F function M.throttle(ms, fn) local timer = vim.uv.new_timer() - local running = false - local first = true + local pending = false - return function(...) - local args = { ... } - local wrapped = function() - fn(unpack(args)) + return function() + if timer:is_active() then + pending = true + return end - if not running then - if first then - wrapped() - first = false - end - - timer:start(ms, 0, function() - running = false - vim.schedule(wrapped) + timer:start( + 0, + ms, + vim.schedule_wrap(function() + fn() + if pending then + pending = false + else + timer:stop() + end end) - - running = true - end + ) end end diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 7d349d3..5702531 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -67,7 +67,10 @@ function M.create() self.state = vim.deepcopy(default_state) self.render = Render.new(self) - self.update = Util.throttle(Config.options.ui.throttle, self.update) + local update = self.update + self.update = Util.throttle(Config.options.ui.throttle, function() + update(self) + end) for _, pattern in ipairs({ "LazyRender", "LazyFloatResized" }) do self:on({ "User" }, function() From 0614ca6ca629704cb1846c0d6f9a250b526900b9 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 14:28:53 +0200 Subject: [PATCH 604/815] perf: tasks are now fully async --- lua/lazy/core/config.lua | 2 +- lua/lazy/manage/task/init.lua | 153 +++++++++++++++++++--------------- 2 files changed, 87 insertions(+), 68 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index b7f9c73..73e0970 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -105,7 +105,7 @@ M.defaults = { -- leave nil, to automatically select a browser depending on your OS. -- If you want to use a specific browser, you can define it here browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events + throttle = 1000 / 30, -- how frequently should the ui process render events custom_keys = { -- You can define custom key maps here. If present, the description will -- be shown in the help menu. diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index df8e792..42268e8 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -4,7 +4,45 @@ local Process = require("lazy.manage.process") ---@field skip? fun(plugin:LazyPlugin, opts?:TaskOptions):any? ---@field run fun(task:LazyTask, opts:TaskOptions) ----@alias LazyTaskState fun():boolean? +---@alias LazyTaskState {task:LazyTask, thread:thread} + +local Scheduler = {} +---@type LazyTaskState[] +Scheduler._queue = {} +Scheduler._executor = assert(vim.loop.new_check()) +Scheduler._running = false + +function Scheduler.step() + Scheduler._running = true + local budget = 1 * 1e6 + local start = vim.loop.hrtime() + local count = #Scheduler._queue + local i = 0 + while #Scheduler._queue > 0 and vim.loop.hrtime() - start < budget do + ---@type LazyTaskState + local state = table.remove(Scheduler._queue, 1) + state.task:_step(state.thread) + if coroutine.status(state.thread) ~= "dead" then + table.insert(Scheduler._queue, state) + end + i = i + 1 + if i >= count then + break + end + end + Scheduler._running = false + if #Scheduler._queue == 0 then + return Scheduler._executor:stop() + end +end + +---@param state LazyTaskState +function Scheduler.add(state) + table.insert(Scheduler._queue, state) + if not Scheduler._executor:is_active() then + Scheduler._executor:start(vim.schedule_wrap(Scheduler.step)) + end +end ---@class LazyTask ---@field plugin LazyPlugin @@ -13,11 +51,11 @@ local Process = require("lazy.manage.process") ---@field status string ---@field error? string ---@field warn? string ----@field private _task fun(task:LazyTask) ----@field private _running LazyPluginState[] +---@field private _task fun(task:LazyTask, opts:TaskOptions) ---@field private _started? number ---@field private _ended? number ---@field private _opts TaskOptions +---@field private _threads thread[] local Task = {} ---@class TaskOptions: {[string]:any} @@ -32,18 +70,17 @@ function Task.new(plugin, name, task, opts) __index = Task, }) self._opts = opts or {} - self._running = {} + self._threads = {} self._task = task self._started = nil self.plugin = plugin self.name = name self.output = "" self.status = "" - plugin._.tasks = plugin._.tasks or {} ---@param other LazyTask plugin._.tasks = vim.tbl_filter(function(other) return other.name ~= name or other:is_running() - end, plugin._.tasks) + end, plugin._.tasks or {}) table.insert(plugin._.tasks, self) return self end @@ -52,27 +89,26 @@ function Task:has_started() return self._started ~= nil end +function Task:has_ended() + return self._ended ~= nil +end + function Task:is_done() - return self:has_started() and not self:is_running() + return self:has_started() and self:has_ended() end function Task:is_running() - return self:has_started() and self._ended == nil + return self:has_started() and not self:has_ended() end function Task:start() - if vim.in_fast_event() then - return vim.schedule(function() - self:start() - end) - end + assert(not self:has_started(), "task already started") + assert(not self:has_ended(), "task already done") + self._started = vim.uv.hrtime() - ---@type boolean, string|any - local ok, err = pcall(self._task, self, self._opts) - if not ok then - self.error = err or "failed" - end - self:_check() + self:async(function() + self._task(self, self._opts) + end) end ---@param msg string|string[] @@ -102,36 +138,33 @@ end ---@param fn async fun() function Task:async(fn) local co = coroutine.create(fn) - local check = vim.uv.new_check() - check:start(vim.schedule_wrap(function() - local status = coroutine.status(co) - if status == "dead" then - check:stop() - self:_check() - elseif status == "suspended" then - local ok, res = coroutine.resume(co) - if not ok then - error(res) - elseif res then - self.status = res - self.output = self.output .. "\n" .. res - vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) - end - end - end)) - - table.insert(self._running, function() - return check:is_active() - end) + table.insert(self._threads, co) + Scheduler.add({ task = self, thread = co }) end ----@private -function Task:_check() - for _, state in ipairs(self._running) do - if state() then +---@param co thread +function Task:_step(co) + local status = coroutine.status(co) + if status == "suspended" then + local ok, res = coroutine.resume(co) + if not ok then + self:notify_error(tostring(res)) + elseif res then + self:notify(tostring(res)) + end + end + for _, t in ipairs(self._threads) do + if coroutine.status(t) ~= "dead" then return end end + self:_done() +end + +---@private +function Task:_done() + assert(self:has_started(), "task not started") + assert(not self:has_ended(), "task already done") self._ended = vim.uv.hrtime() if self._opts.on_done then self._opts.on_done(self) @@ -147,29 +180,13 @@ function Task:time() if not self:has_started() then return 0 end - if not self:is_done() then + if not self:has_ended() then return (vim.uv.hrtime() - self._started) / 1e6 end return (self._ended - self._started) / 1e6 end ----@param fn fun() -function Task:schedule(fn) - local done = false - table.insert(self._running, function() - return not done - end) - vim.schedule(function() - ---@type boolean, string|any - local ok, err = pcall(fn) - if not ok then - self.error = err or "failed" - end - done = true - self:_check() - end) -end - +---@async ---@param cmd string ---@param opts? ProcessOpts function Task:spawn(cmd, opts) @@ -178,6 +195,7 @@ function Task:spawn(cmd, opts) local on_exit = opts.on_exit function opts.on_line(line) + self:notify(line) self.status = line if on_line then pcall(on_line, line) @@ -185,6 +203,7 @@ function Task:spawn(cmd, opts) vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) end + local running = true ---@param output string function opts.on_exit(ok, output) self.output = self.output .. output @@ -194,12 +213,12 @@ function Task:spawn(cmd, opts) if on_exit then pcall(on_exit, ok, output) end - self:_check() + running = false + end + Process.spawn(cmd, opts) + while running do + coroutine.yield() end - local proc = Process.spawn(cmd, opts) - table.insert(self._running, function() - return proc and not proc:is_closing() - end) end ---@param tasks (LazyTask?)[] From bbe136bda6b3afca84b686f77800e3cbe08f3cdb Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 14:29:00 +0200 Subject: [PATCH 605/815] test: fix tests --- lua/lazy/manage/task/init.lua | 1 - tests/manage/runner_spec.lua | 3 ++- tests/manage/task_spec.lua | 43 ++++++++++++++++++----------------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 42268e8..9c2d179 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -195,7 +195,6 @@ function Task:spawn(cmd, opts) local on_exit = opts.on_exit function opts.on_line(line) - self:notify(line) self.status = line if on_line then pcall(on_line, line) diff --git a/tests/manage/runner_spec.lua b/tests/manage/runner_spec.lua index b3b606b..ba940e2 100644 --- a/tests/manage/runner_spec.lua +++ b/tests/manage/runner_spec.lua @@ -32,7 +32,8 @@ describe("runner", function() package.loaded["lazy.manage.task.test"]["async" .. i] = { ---@param task LazyTask run = function(task) - task:schedule(function() + task:async(function() + coroutine.yield() table.insert(runs, { plugin = task.plugin.name, task = task.name }) end) end, diff --git a/tests/manage/task_spec.lua b/tests/manage/task_spec.lua index bbb8704..546bc34 100644 --- a/tests/manage/task_spec.lua +++ b/tests/manage/task_spec.lua @@ -4,20 +4,18 @@ local Task = require("lazy.manage.task") describe("task", function() local plugin = { name = "test", _ = {} } - local done = false - ---@type string? - local error + ---@type {done?:boolean, error:string?} + local task_result = {} local opts = { + ---@param task LazyTask on_done = function(task) - done = true - error = task.error + task_result = { done = true, error = task.error } end, } before_each(function() - done = false - error = nil + task_result = {} end) it("simple function", function() @@ -25,9 +23,10 @@ describe("task", function() assert(not task:has_started()) assert(not task:is_running()) task:start() + task:wait() assert(not task:is_running()) assert(task:is_done()) - assert(done) + assert(task_result.done) end) it("detects errors", function() @@ -37,18 +36,19 @@ describe("task", function() assert(not task:has_started()) assert(not task:is_running()) task:start() + task:wait() assert(task:is_done()) assert(not task:is_running()) - assert(done) - assert(error) + assert(task_result.done) + assert(task_result.error) assert(task.error and task.error:find("test")) end) - it("schedule", function() - local running = false + it("async", function() + local running = true local task = Task.new(plugin, "test", function(task) - running = true - task:schedule(function() + task:async(function() + coroutine.yield() running = false end) end, opts) @@ -56,25 +56,26 @@ describe("task", function() assert(not task:has_started()) task:start() assert(running) - assert(#task._running == 1) assert(task:is_running()) assert(not task:is_done()) task:wait() + assert(not running) assert(task:is_done()) assert(not task:is_running()) - assert(done) + assert(task_result.done) assert(not task.error) end) it("spawn errors", function() - local task = Task.new(plugin, "test", function(task) + local task = Task.new(plugin, "spawn_errors", function(task) task:spawn("foobar") end, opts) assert(not task:is_running()) task:start() + task:wait() assert(not task:is_running()) - assert(done) - assert(task.error and task.error:find("Failed to spawn")) + assert(task_result.done) + assert(task.error and task.error:find("Failed to spawn"), task.output) end) it("spawn", function() @@ -89,7 +90,7 @@ describe("task", function() task:wait() assert(task:is_done()) assert.same(task.output, "foo\n") - assert(done) + assert(task_result.done) assert(not task.error) end) @@ -103,7 +104,7 @@ describe("task", function() assert(task:is_running()) task:wait() assert(task.output == "foo\nbar\n" or task.output == "bar\nfoo\n", task.output) - assert(done) + assert(task_result.done) assert(not task.error) end) end) From 9c1dd5a09065218a8aa67f251a2116cf74420b8c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 14:30:55 +0200 Subject: [PATCH 606/815] test: buse busted for running tasks --- .busted | 11 +++++++++++ .github/workflows/ci.yml | 2 +- tests/busted.lua | 28 ++++++++++++++++++++++++++++ tests/init.lua | 36 ------------------------------------ tests/run | 3 --- 5 files changed, 40 insertions(+), 40 deletions(-) create mode 100644 .busted create mode 100755 tests/busted.lua delete mode 100644 tests/init.lua delete mode 100755 tests/run diff --git a/.busted b/.busted new file mode 100644 index 0000000..98b3032 --- /dev/null +++ b/.busted @@ -0,0 +1,11 @@ +return { + _all = { + coverage = false, + }, + default = { + verbose = true, + }, + tests = { + verbose = true, + }, +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e7c3dd2..0d20294 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ jobs: run: | nvim --version [ ! -d tests ] && exit 0 - nvim --headless -u tests/init.lua -c "PlenaryBustedDirectory tests/ {minimal_init = 'tests/init.lua', sequential = true}" + nvim -l tests/busted.lua tests community: runs-on: ubuntu-latest steps: diff --git a/tests/busted.lua b/tests/busted.lua new file mode 100755 index 0000000..146ab96 --- /dev/null +++ b/tests/busted.lua @@ -0,0 +1,28 @@ +#!/usr/bin/env -S nvim -l + +-- set stdpaths to use .tests +local root = vim.fn.fnamemodify("./.tests", ":p") +for _, name in ipairs({ "config", "data", "state", "cache" }) do + vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name +end + +-- -- Bootstrap lazy.nvim +-- local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +-- if not (vim.uv or vim.loop).fs_stat(lazypath) then +-- local lazyrepo = "https://github.com/folke/lazy.nvim.git" +-- vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) +-- end +-- vim.opt.rtp:prepend(lazypath) +vim.opt.rtp:prepend(".") + +vim.o.loadplugins = true -- enable since nvim -l disables plugins + +-- Setup lazy.nvim +require("lazy").setup({ + "lunarmodules/busted", -- add busted +}) + +-- run busted +return pcall(require("busted.runner"), { + standalone = false, +}) or os.exit(1) diff --git a/tests/init.lua b/tests/init.lua deleted file mode 100644 index 7b243c5..0000000 --- a/tests/init.lua +++ /dev/null @@ -1,36 +0,0 @@ -local M = {} - -function M.root(root) - local f = debug.getinfo(1, "S").source:sub(2) - return vim.fn.fnamemodify(f, ":p:h:h") .. "/" .. (root or "") -end - ----@param plugin string -function M.load(plugin) - local name = plugin:match(".*/(.*)") - local package_root = M.root(".tests/site/pack/deps/start/") - if not vim.uv.fs_stat(package_root .. name) then - print("Installing " .. plugin) - vim.fn.mkdir(package_root, "p") - vim.fn.system({ - "git", - "clone", - "--depth=1", - "https://github.com/" .. plugin .. ".git", - package_root .. "/" .. name, - }) - end -end - -function M.setup() - vim.cmd([[set runtimepath=$VIMRUNTIME]]) - vim.opt.runtimepath:append(M.root()) - vim.opt.packpath = { M.root(".tests/site") } - M.load("nvim-lua/plenary.nvim") - vim.env.XDG_CONFIG_HOME = M.root(".tests/config") - vim.env.XDG_DATA_HOME = M.root(".tests/data") - vim.env.XDG_STATE_HOME = M.root(".tests/state") - vim.env.XDG_CACHE_HOME = M.root(".tests/cache") -end - -M.setup() diff --git a/tests/run b/tests/run deleted file mode 100755 index 412d7b5..0000000 --- a/tests/run +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -nvim --headless -u tests/init.lua -c "PlenaryBustedDirectory tests {minimal_init = 'tests//init.lua', sequential = true}" From 0eb46e781666d2a5b288b671813f65b00896fff9 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 14:35:29 +0200 Subject: [PATCH 607/815] ci: use utfTerminal output for busted --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d20294..647365c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ jobs: run: | nvim --version [ ! -d tests ] && exit 0 - nvim -l tests/busted.lua tests + nvim -l tests/busted.lua tests -o utfTerminal community: runs-on: ubuntu-latest steps: From 768de1ebf6a1b45020438df018c1ba39669ca863 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 15:11:31 +0200 Subject: [PATCH 608/815] refactor: move scheduler to async --- lua/lazy/async.lua | 107 ++++++++++++++++++++++++++++++++++ lua/lazy/manage/task/init.lua | 84 +++++++------------------- 2 files changed, 129 insertions(+), 62 deletions(-) create mode 100644 lua/lazy/async.lua diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua new file mode 100644 index 0000000..a7bcfac --- /dev/null +++ b/lua/lazy/async.lua @@ -0,0 +1,107 @@ +---@class AsyncOpts +---@field on_done? fun() +---@field on_error? fun(err:string) +---@field on_yield? fun(res:any) + +local M = {} + +---@type Async[] +M._queue = {} +M._executor = assert(vim.loop.new_check()) +M._running = false + +---@class Async +---@field co thread +---@field opts AsyncOpts +local Async = {} + +---@param fn async fun() +---@param opts? AsyncOpts +---@return Async +function Async.new(fn, opts) + local self = setmetatable({}, { __index = Async }) + self.co = coroutine.create(fn) + self.opts = opts or {} + return self +end + +function Async:running() + return coroutine.status(self.co) ~= "dead" +end + +function Async:step() + local status = coroutine.status(self.co) + if status == "suspended" then + local ok, res = coroutine.resume(self.co) + if not ok then + if self.opts.on_error then + self.opts.on_error(tostring(res)) + end + elseif res then + if self.opts.on_yield then + self.opts.on_yield(res) + end + end + end + if self:running() then + return true + end + if self.opts.on_done then + self.opts.on_done() + end +end + +function M.step() + M._running = true + local budget = 1 * 1e6 + local start = vim.loop.hrtime() + local count = #M._queue + local i = 0 + while #M._queue > 0 and vim.loop.hrtime() - start < budget do + ---@type Async + local state = table.remove(M._queue, 1) + if state:step() then + table.insert(M._queue, state) + end + i = i + 1 + if i >= count then + break + end + end + M._running = false + if #M._queue == 0 then + return M._executor:stop() + end +end + +---@param async Async +function M.add(async) + table.insert(M._queue, async) + if not M._executor:is_active() then + M._executor:start(vim.schedule_wrap(M.step)) + end + return async +end + +---@param fn async fun() +---@param opts? AsyncOpts +function M.run(fn, opts) + return M.add(Async.new(fn, opts)) +end + +---@generic T: async fun() +---@param fn T +---@param opts? AsyncOpts +---@return T +function M.wrap(fn, opts) + return function(...) + local args = { ... } + ---@async + local wrapped = function() + return fn(unpack(args)) + end + return M.run(wrapped, opts) + end +end + +return M diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 9c2d179..5a9079d 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -1,3 +1,4 @@ +local Async = require("lazy.async") local Process = require("lazy.manage.process") ---@class LazyTaskDef @@ -6,44 +7,6 @@ local Process = require("lazy.manage.process") ---@alias LazyTaskState {task:LazyTask, thread:thread} -local Scheduler = {} ----@type LazyTaskState[] -Scheduler._queue = {} -Scheduler._executor = assert(vim.loop.new_check()) -Scheduler._running = false - -function Scheduler.step() - Scheduler._running = true - local budget = 1 * 1e6 - local start = vim.loop.hrtime() - local count = #Scheduler._queue - local i = 0 - while #Scheduler._queue > 0 and vim.loop.hrtime() - start < budget do - ---@type LazyTaskState - local state = table.remove(Scheduler._queue, 1) - state.task:_step(state.thread) - if coroutine.status(state.thread) ~= "dead" then - table.insert(Scheduler._queue, state) - end - i = i + 1 - if i >= count then - break - end - end - Scheduler._running = false - if #Scheduler._queue == 0 then - return Scheduler._executor:stop() - end -end - ----@param state LazyTaskState -function Scheduler.add(state) - table.insert(Scheduler._queue, state) - if not Scheduler._executor:is_active() then - Scheduler._executor:start(vim.schedule_wrap(Scheduler.step)) - end -end - ---@class LazyTask ---@field plugin LazyPlugin ---@field name string @@ -55,7 +18,7 @@ end ---@field private _started? number ---@field private _ended? number ---@field private _opts TaskOptions ----@field private _threads thread[] +---@field private _running Async[] local Task = {} ---@class TaskOptions: {[string]:any} @@ -70,7 +33,7 @@ function Task.new(plugin, name, task, opts) __index = Task, }) self._opts = opts or {} - self._threads = {} + self._running = {} self._task = task self._started = nil self.plugin = plugin @@ -137,34 +100,31 @@ end ---@param fn async fun() function Task:async(fn) - local co = coroutine.create(fn) - table.insert(self._threads, co) - Scheduler.add({ task = self, thread = co }) -end - ----@param co thread -function Task:_step(co) - local status = coroutine.status(co) - if status == "suspended" then - local ok, res = coroutine.resume(co) - if not ok then - self:notify_error(tostring(res)) - elseif res then - self:notify(tostring(res)) - end - end - for _, t in ipairs(self._threads) do - if coroutine.status(t) ~= "dead" then - return - end - end - self:_done() + local async = Async.run(fn, { + on_done = function() + self:_done() + end, + on_error = function(err) + self:notify_error(err) + end, + on_yield = function(res) + self:notify(res) + end, + }) + table.insert(self._running, async) end ---@private function Task:_done() assert(self:has_started(), "task not started") assert(not self:has_ended(), "task already done") + + for _, t in ipairs(self._running) do + if t:running() then + return + end + end + self._ended = vim.uv.hrtime() if self._opts.on_done then self._opts.on_done(self) From 765773a176dced0b9e95a0797af4c19f639d71af Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 17:06:56 +0200 Subject: [PATCH 609/815] refactor: use new async code for runner and simplify task class --- lua/lazy/manage/runner.lua | 208 +++++++++++++------------------- lua/lazy/manage/task/init.lua | 74 ++++-------- lua/lazy/manage/task/plugin.lua | 6 +- tests/manage/runner_spec.lua | 7 +- tests/manage/task_spec.lua | 43 +++---- 5 files changed, 133 insertions(+), 205 deletions(-) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 9b766df..31b194b 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -1,23 +1,24 @@ +local Async = require("lazy.async") local Config = require("lazy.core.config") local Task = require("lazy.manage.task") -local Util = require("lazy.util") ---@class RunnerOpts ---@field pipeline (string|{[1]:string, [string]:any})[] ---@field plugins? LazyPlugin[]|fun(plugin:LazyPlugin):any? ---@field concurrency? number ----@alias PipelineStep {task:string, opts?:TaskOptions} ----@alias LazyRunnerTask {co:thread, status: {task?:LazyTask, waiting?:boolean}, plugin: string} +---@class RunnerTask +---@field task? LazyTask +---@field step number + +---@alias PipelineStep {task:string, opts?:TaskOptions } ---@class Runner ---@field _plugins table ----@field _running LazyRunnerTask[] ---@field _pipeline PipelineStep[] ----@field _sync PipelineStep[] ---@field _on_done fun()[] ----@field _syncing boolean ---@field _opts RunnerOpts +---@field _running? Async local Runner = {} ---@param opts RunnerOpts @@ -37,7 +38,6 @@ function Runner.new(opts) for _, plugin in ipairs(pp) do self._plugins[plugin.name] = plugin end - self._running = {} self._on_done = {} ---@param step string|(TaskOptions|{[1]:string}) @@ -45,10 +45,6 @@ function Runner.new(opts) return type(step) == "string" and { task = step } or { task = step[1], opts = step } end, self._opts.pipeline) - self._sync = vim.tbl_filter(function(step) - return step.task == "wait" - end, self._pipeline) - return self end @@ -56,139 +52,107 @@ function Runner:plugin(name) return Config.plugins[name] or self._plugins[name] end ----@param entry LazyRunnerTask -function Runner:_resume(entry) - if entry.status.task and not entry.status.task:is_done() then - return true - end - local ok, status = coroutine.resume(entry.co) - if not ok then - Util.error("Could not resume a task\n" .. status) - end - entry.status = ok and status - return entry.status ~= nil -end - -function Runner:resume(waiting) - if self._syncing then - return true - end - if waiting then - local sync = self._sync[1] - table.remove(self._sync, 1) - if sync then - self._syncing = true - vim.schedule(function() - if sync.opts and type(sync.opts.sync) == "function" then - sync.opts.sync(self) - end - for _, entry in ipairs(self._running) do - if entry.status then - if entry.status.waiting then - entry.status.waiting = false - local plugin = self:plugin(entry.plugin) - if plugin then - plugin._.working = true - end - end - end - end - self._syncing = false - end) - end - end - local running = 0 - for _, entry in ipairs(self._running) do - if entry.status then - if not entry.status.waiting and self:_resume(entry) then - running = running + 1 - if self._opts.concurrency and running >= self._opts.concurrency then - break - end - end - end - end - return self._syncing or running > 0 or (not waiting and self:resume(true)) -end - function Runner:start() - ---@type string[] - local names = vim.tbl_keys(self._plugins) - table.sort(names) - for _, name in pairs(names) do - local co = coroutine.create(self.run_pipeline) - local ok, err = coroutine.resume(co, self, name) - if ok then - table.insert(self._running, { co = co, status = {}, plugin = name }) - else - Util.error("Could not start tasks for " .. name .. "\n" .. err) - end - end - - local check = vim.uv.new_check() - check:start(function() - if self:resume() then - return - end - check:stop() - self._running = {} - for _, cb in ipairs(self._on_done) do - vim.schedule(cb) - end - self._on_done = {} - end) + ---@async + self._running = Async.run(function() + self:_start() + end, { + on_done = function() + for _, cb in ipairs(self._on_done) do + cb() + end + end, + }) end ---@async ----@param name string -function Runner:run_pipeline(name) - local plugin = self:plugin(name) - plugin._.working = true - coroutine.yield() - for _, step in ipairs(self._pipeline) do - if step.task == "wait" then - plugin._.working = false - coroutine.yield({ waiting = true }) - plugin._.working = true - else - plugin = self:plugin(name) - local task = self:queue(plugin, step.task, step.opts) - if task then - coroutine.yield({ task = task }) - assert(task:is_done()) - if task.error then +function Runner:_start() + ---@type string[] + local names = vim.tbl_keys(self._plugins) + table.sort(names) + + ---@type table + local state = {} + + local active = 1 + local waiting = 0 + ---@type number? + local wait_step = nil + + ---@param resume? boolean + local function continue(resume) + active = #names + waiting = 0 + wait_step = nil + for _, name in ipairs(names) do + state[name] = state[name] or { step = 0 } + local s = state[name] + local running = s.task and s.task:is_running() + local step = self._pipeline[s.step] + + if step and step.task == "wait" and not resume then + waiting = waiting + 1 + active = active - 1 + wait_step = s.step + elseif not running then + local plugin = self:plugin(name) + if s.task and s.task.error then + active = active - 1 + elseif s.step == #self._pipeline then + s.task = nil + active = active - 1 plugin._.working = false - return + elseif s.step < #self._pipeline then + s.step = s.step + 1 + step = self._pipeline[s.step] + if step.task == "wait" then + plugin._.working = false + else + s.task = self:queue(plugin, step) + plugin._.working = not not s.task + end end end end end - plugin._.working = false + + while active > 0 do + continue() + if active == 0 and waiting > 0 then + local sync = self._pipeline[wait_step] + if sync and sync.opts and type(sync.opts.sync) == "function" then + sync.opts.sync(self) + end + continue(true) + end + coroutine.yield() + end end ---@param plugin LazyPlugin ----@param task_name string ----@param opts? TaskOptions +---@param step PipelineStep ---@return LazyTask? -function Runner:queue(plugin, task_name, opts) - assert(self._running) - local def = vim.split(task_name, ".", { plain = true }) +function Runner:queue(plugin, step) + assert(self._running and self._running:running(), "Runner is not running") + local def = vim.split(step.task, ".", { plain = true }) ---@type LazyTaskDef local task_def = require("lazy.manage.task." .. def[1])[def[2]] - assert(task_def) - opts = opts or {} + assert(task_def, "Task not found: " .. step.task) + local opts = step.opts or {} if not (task_def.skip and task_def.skip(plugin, opts)) then - local task = Task.new(plugin, def[2], task_def.run, opts) - task:start() - return task + return Task.new(plugin, def[2], task_def.run, opts) end end +function Runner:is_running() + return self._running and self._running:running() +end + -- Execute the callback async when done. -- When no callback is specified, this will wait sync ---@param cb? fun() function Runner:wait(cb) - if #self._running == 0 then + if not self:is_running() then if cb then cb() end @@ -199,7 +163,7 @@ function Runner:wait(cb) table.insert(self._on_done, cb) else -- sync wait - while #self._running > 0 do + while self:is_running() do vim.wait(10) end end diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 5a9079d..98c7636 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -5,7 +5,7 @@ local Process = require("lazy.manage.process") ---@field skip? fun(plugin:LazyPlugin, opts?:TaskOptions):any? ---@field run fun(task:LazyTask, opts:TaskOptions) ----@alias LazyTaskState {task:LazyTask, thread:thread} +---@alias LazyTaskFn async fun(task:LazyTask, opts:TaskOptions) ---@class LazyTask ---@field plugin LazyPlugin @@ -14,11 +14,10 @@ local Process = require("lazy.manage.process") ---@field status string ---@field error? string ---@field warn? string ----@field private _task fun(task:LazyTask, opts:TaskOptions) ---@field private _started? number ---@field private _ended? number ---@field private _opts TaskOptions ----@field private _running Async[] +---@field private _running Async local Task = {} ---@class TaskOptions: {[string]:any} @@ -27,15 +26,10 @@ local Task = {} ---@param plugin LazyPlugin ---@param name string ---@param opts? TaskOptions ----@param task fun(task:LazyTask) +---@param task LazyTaskFn function Task.new(plugin, name, task, opts) - local self = setmetatable({}, { - __index = Task, - }) + local self = setmetatable({}, { __index = Task }) self._opts = opts or {} - self._running = {} - self._task = task - self._started = nil self.plugin = plugin self.name = name self.output = "" @@ -45,6 +39,7 @@ function Task.new(plugin, name, task, opts) return other.name ~= name or other:is_running() end, plugin._.tasks or {}) table.insert(plugin._.tasks, self) + self:_start(task) return self end @@ -56,22 +51,31 @@ function Task:has_ended() return self._ended ~= nil end -function Task:is_done() - return self:has_started() and self:has_ended() -end - function Task:is_running() - return self:has_started() and not self:has_ended() + return not self:has_ended() end -function Task:start() +---@private +---@param task LazyTaskFn +function Task:_start(task) assert(not self:has_started(), "task already started") assert(not self:has_ended(), "task already done") self._started = vim.uv.hrtime() - self:async(function() - self._task(self, self._opts) - end) + ---@async + self._running = Async.run(function() + task(self, self._opts) + end, { + on_done = function() + self:_done() + end, + on_error = function(err) + self:notify_error(err) + end, + on_yield = function(res) + self:notify(res) + end, + }) end ---@param msg string|string[] @@ -98,31 +102,13 @@ function Task:notify_warn(msg) self:notify(msg, vim.diagnostic.severity.WARN) end ----@param fn async fun() -function Task:async(fn) - local async = Async.run(fn, { - on_done = function() - self:_done() - end, - on_error = function(err) - self:notify_error(err) - end, - on_yield = function(res) - self:notify(res) - end, - }) - table.insert(self._running, async) -end - ---@private function Task:_done() assert(self:has_started(), "task not started") assert(not self:has_ended(), "task already done") - for _, t in ipairs(self._running) do - if t:running() then - return - end + if self._running and self._running:running() then + return end self._ended = vim.uv.hrtime() @@ -180,16 +166,6 @@ function Task:spawn(cmd, opts) end end ----@param tasks (LazyTask?)[] -function Task.all_done(tasks) - for _, task in ipairs(tasks) do - if task and not task:is_done() then - return false - end - end - return true -end - function Task:wait() while self:is_running() do vim.wait(10) diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index cb426ec..ddf53a1 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -65,9 +65,7 @@ M.build = { ---@cast builders (string|fun(LazyPlugin))[] for _, build in ipairs(builders) do if type(build) == "function" then - self:async(function() - build(self.plugin) - end) + build(self.plugin) elseif build == "rockspec" then Rocks.build(self) elseif build:sub(1, 1) == ":" then @@ -78,7 +76,7 @@ M.build = { if not chunk or err then error(err) end - self:async(chunk) + chunk() else B.shell(self, build) end diff --git a/tests/manage/runner_spec.lua b/tests/manage/runner_spec.lua index ba940e2..2eb1ab1 100644 --- a/tests/manage/runner_spec.lua +++ b/tests/manage/runner_spec.lua @@ -30,12 +30,11 @@ describe("runner", function() end, } package.loaded["lazy.manage.task.test"]["async" .. i] = { + ---@async ---@param task LazyTask run = function(task) - task:async(function() - coroutine.yield() - table.insert(runs, { plugin = task.plugin.name, task = task.name }) - end) + coroutine.yield() + table.insert(runs, { plugin = task.plugin.name, task = task.name }) end, } end diff --git a/tests/manage/task_spec.lua b/tests/manage/task_spec.lua index 546bc34..11487c5 100644 --- a/tests/manage/task_spec.lua +++ b/tests/manage/task_spec.lua @@ -1,3 +1,4 @@ +---@module 'luassert' --# selene:allow(incorrect_standard_library_use) local Task = require("lazy.manage.task") @@ -20,12 +21,10 @@ describe("task", function() it("simple function", function() local task = Task.new(plugin, "test", function() end, opts) - assert(not task:has_started()) - assert(not task:is_running()) - task:start() + assert(task:has_started()) + assert(task:is_running()) task:wait() assert(not task:is_running()) - assert(task:is_done()) assert(task_result.done) end) @@ -33,11 +32,9 @@ describe("task", function() local task = Task.new(plugin, "test", function() error("test") end, opts) - assert(not task:has_started()) - assert(not task:is_running()) - task:start() + assert(task:has_started()) + assert(task:is_running()) task:wait() - assert(task:is_done()) assert(not task:is_running()) assert(task_result.done) assert(task_result.error) @@ -46,21 +43,17 @@ describe("task", function() it("async", function() local running = true - local task = Task.new(plugin, "test", function(task) - task:async(function() - coroutine.yield() - running = false - end) + ---@async + local task = Task.new(plugin, "test", function() + coroutine.yield() + running = false end, opts) - assert(not task:is_running()) - assert(not task:has_started()) - task:start() + assert(task:has_started()) + assert(task:is_running()) assert(running) assert(task:is_running()) - assert(not task:is_done()) task:wait() assert(not running) - assert(task:is_done()) assert(not task:is_running()) assert(task_result.done) assert(not task.error) @@ -70,8 +63,8 @@ describe("task", function() local task = Task.new(plugin, "spawn_errors", function(task) task:spawn("foobar") end, opts) - assert(not task:is_running()) - task:start() + assert(task:has_started()) + assert(task:is_running()) task:wait() assert(not task:is_running()) assert(task_result.done) @@ -82,13 +75,11 @@ describe("task", function() local task = Task.new(plugin, "test", function(task) task:spawn("echo", { args = { "foo" } }) end, opts) - assert(not task:is_running()) - assert(not task:has_started()) - task:start() + assert(task:has_started()) + assert(task:is_running()) assert(task:has_started()) assert(task:is_running()) task:wait() - assert(task:is_done()) assert.same(task.output, "foo\n") assert(task_result.done) assert(not task.error) @@ -99,8 +90,8 @@ describe("task", function() task:spawn("echo", { args = { "foo" } }) task:spawn("echo", { args = { "bar" } }) end, opts) - assert(not task:is_running()) - task:start() + assert(task:has_started()) + assert(task:is_running()) assert(task:is_running()) task:wait() assert(task.output == "foo\nbar\n" or task.output == "bar\nfoo\n", task.output) From 6c7ef7e27a797acd68f6bffcb90d58f03dd8431d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 18:31:31 +0200 Subject: [PATCH 610/815] refactor: logging --- lua/lazy/core/plugin.lua | 2 +- lua/lazy/manage/init.lua | 2 +- lua/lazy/manage/runner.lua | 2 +- lua/lazy/manage/task/git.lua | 27 +++++++---- lua/lazy/manage/task/init.lua | 82 ++++++++++++++++++++++----------- lua/lazy/manage/task/plugin.lua | 7 +-- lua/lazy/pkg/rockspec.lua | 6 +-- lua/lazy/view/colors.lua | 5 +- lua/lazy/view/render.lua | 68 +++++++++++++++------------ lua/lazy/view/sections.lua | 9 ++-- 10 files changed, 130 insertions(+), 80 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index a806b0a..a3cb497 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -403,7 +403,7 @@ end ---@param plugin LazyPlugin function M.has_errors(plugin) for _, task in ipairs(plugin._.tasks or {}) do - if task.error then + if task:has_errors() then return true end end diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 9737538..e0b2233 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -232,7 +232,7 @@ function M.clear(plugins) if plugin._.tasks then ---@param task LazyTask plugin._.tasks = vim.tbl_filter(function(task) - return task:is_running() or task.error + return task:is_running() or task:has_errors() end, plugin._.tasks) end end diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 31b194b..e517ddc 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -96,7 +96,7 @@ function Runner:_start() wait_step = s.step elseif not running then local plugin = self:plugin(name) - if s.task and s.task.error then + if s.task and s.task:has_errors() then active = active - 1 elseif s.step == #self._pipeline then s.task = nil diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 56d2b73..4bd7134 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -18,6 +18,7 @@ M.log = { local stat = vim.uv.fs_stat(plugin.dir .. "/.git") return not (stat and stat.type == "directory") end, + ---@async ---@param opts {args?: string[], updated?:boolean, check?:boolean} run = function(self, opts) local args = { @@ -68,6 +69,7 @@ M.clone = { skip = function(plugin) return plugin._.installed or plugin._.is_local end, + ---@async run = function(self) local args = { "clone", @@ -129,6 +131,7 @@ M.branch = { local branch = assert(Git.get_branch(plugin)) return Git.get_commit(plugin.dir, branch, true) end, + ---@async run = function(self) local args = { "remote", @@ -154,14 +157,17 @@ M.origin = { local origin = Git.get_origin(plugin.dir) return origin == plugin.url end, + ---@async ---@param opts {check?:boolean} run = function(self, opts) if opts.check then local origin = Git.get_origin(self.plugin.dir) - self.error = "Origin has changed:\n" - self.error = self.error .. " * old: " .. origin .. "\n" - self.error = self.error .. " * new: " .. self.plugin.url .. "\n" - self.error = self.error .. "Please run update to fix" + self:error({ + "Origin has changed:", + " * old: " .. origin, + " * new: " .. self.plugin.url, + "Please run update to fix", + }) return end require("lazy.manage.task.fs").clean.run(self, opts) @@ -173,6 +179,7 @@ M.status = { skip = function(plugin) return not plugin._.installed or plugin._.is_local end, + ---@async run = function(self) self:spawn("git", { args = { "ls-files", "-d", "-m" }, @@ -180,6 +187,7 @@ M.status = { on_exit = function(ok, output) if ok then local lines = vim.split(output, "\n") + ---@type string[] lines = vim.tbl_filter(function(line) -- Fix doc/tags being marked as modified if line:gsub("[\\/]", "/") == "doc/tags" then @@ -190,12 +198,13 @@ M.status = { return line ~= "" end, lines) if #lines > 0 then - self.error = "You have local changes in `" .. self.plugin.dir .. "`:\n" + local msg = { "You have local changes in `" .. self.plugin.dir .. "`:" } for _, line in ipairs(lines) do - self.error = self.error .. " * " .. line .. "\n" + msg[#msg + 1] = " * " .. line end - self.error = self.error .. "Please remove them to update.\n" - self.error = self.error .. "You can also press `x` to remove the plugin and then `I` to install it again." + msg[#msg + 1] = "Please remove them to update." + msg[#msg + 1] = "You can also press `x` to remove the plugin and then `I` to install it again." + self:error(msg) end end end, @@ -209,6 +218,7 @@ M.fetch = { return not plugin._.installed or plugin._.is_local end, + ---@async run = function(self) local args = { "fetch", @@ -236,6 +246,7 @@ M.checkout = { return not plugin._.installed or plugin._.is_local end, + ---@async ---@param opts {lockfile?:boolean} run = function(self, opts) local info = assert(Git.info(self.plugin.dir)) diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 98c7636..496dac9 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -3,21 +3,23 @@ local Process = require("lazy.manage.process") ---@class LazyTaskDef ---@field skip? fun(plugin:LazyPlugin, opts?:TaskOptions):any? ----@field run fun(task:LazyTask, opts:TaskOptions) +---@field run async fun(task:LazyTask, opts:TaskOptions) ---@alias LazyTaskFn async fun(task:LazyTask, opts:TaskOptions) +---@class LazyMsg +---@field msg string +---@field level? number + ---@class LazyTask ---@field plugin LazyPlugin ---@field name string ----@field output string ----@field status string ----@field error? string ----@field warn? string +---@field private _log LazyMsg[] ---@field private _started? number ---@field private _ended? number ---@field private _opts TaskOptions ---@field private _running Async +---@field private _level number local Task = {} ---@class TaskOptions: {[string]:any} @@ -30,10 +32,10 @@ local Task = {} function Task.new(plugin, name, task, opts) local self = setmetatable({}, { __index = Task }) self._opts = opts or {} + self._log = {} + self._level = vim.log.levels.TRACE self.plugin = plugin self.name = name - self.output = "" - self.status = "" ---@param other LazyTask plugin._.tasks = vim.tbl_filter(function(other) return other.name ~= name or other:is_running() @@ -43,6 +45,31 @@ function Task.new(plugin, name, task, opts) return self end +---@param level? number +---@return LazyMsg[] +function Task:get_log(level) + level = level or vim.log.levels.DEBUG + return vim.tbl_filter(function(msg) + return msg.level >= level + end, self._log) +end + +---@param level? number +function Task:output(level) + return table.concat( + ---@param m LazyMsg + vim.tbl_map(function(m) + return m.msg + end, self:get_log(level)), + "\n" + ) +end + +function Task:status() + local ret = self._log[#self._log] + return ret and ret.msg or "" +end + function Task:has_started() return self._started ~= nil end @@ -55,6 +82,14 @@ function Task:is_running() return not self:has_ended() end +function Task:has_errors() + return self._level >= vim.log.levels.ERROR +end + +function Task:has_warnings() + return self._level >= vim.log.levels.WARN +end + ---@private ---@param task LazyTaskFn function Task:_start(task) @@ -70,36 +105,33 @@ function Task:_start(task) self:_done() end, on_error = function(err) - self:notify_error(err) + self:error(err) end, on_yield = function(res) - self:notify(res) + self:log(res) end, }) end ---@param msg string|string[] ----@param severity? vim.diagnostic.Severity -function Task:notify(msg, severity) - local var = severity == vim.diagnostic.severity.ERROR and "error" - or severity == vim.diagnostic.severity.WARN and "warn" - or "output" +---@param level? number +function Task:log(msg, level) + level = level or vim.log.levels.DEBUG + self._level = math.max(self._level or 0, level or 0) msg = type(msg) == "table" and table.concat(msg, "\n") or msg ---@cast msg string - ---@diagnostic disable-next-line: no-unknown - self[var] = self[var] and (self[var] .. "\n" .. msg) or msg - self.status = msg + table.insert(self._log, { msg = msg, level = level }) vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) end ---@param msg string|string[] -function Task:notify_error(msg) - self:notify(msg, vim.diagnostic.severity.ERROR) +function Task:error(msg) + self:log(msg, vim.log.levels.ERROR) end ---@param msg string|string[] -function Task:notify_warn(msg) - self:notify(msg, vim.diagnostic.severity.WARN) +function Task:warn(msg) + self:log(msg, vim.log.levels.WARN) end ---@private @@ -141,20 +173,16 @@ function Task:spawn(cmd, opts) local on_exit = opts.on_exit function opts.on_line(line) - self.status = line + self:log(line, vim.log.levels.TRACE) if on_line then pcall(on_line, line) end - vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) end local running = true ---@param output string function opts.on_exit(ok, output) - self.output = self.output .. output - if not ok then - self.error = self.error and (self.error .. "\n" .. output) or output - end + self:log(output, ok and vim.log.levels.DEBUG or vim.log.levels.ERROR) if on_exit then pcall(on_exit, ok, output) end diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index ddf53a1..fd6c12b 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -1,4 +1,3 @@ -local Config = require("lazy.core.config") local Loader = require("lazy.core.loader") local Rocks = require("lazy.pkg.rockspec") local Util = require("lazy.util") @@ -21,9 +20,10 @@ local B = {} ---@param build string function B.cmd(task, build) local cmd = vim.api.nvim_parse_cmd(build:sub(2), {}) --[[@as vim.api.keyset.cmd]] - task.output = vim.api.nvim_cmd(cmd, { output = true }) + task:log(vim.api.nvim_cmd(cmd, { output = true })) end +---@async ---@param task LazyTask ---@param build string function B.shell(task, build) @@ -44,6 +44,7 @@ M.build = { end return not ((plugin._.dirty or plugin._.build) and (plugin.build or get_build_file(plugin))) end, + ---@async run = function(self) vim.cmd([[silent! runtime plugin/rplugin.vim]]) @@ -92,7 +93,7 @@ M.docs = { run = function(self) local docs = self.plugin.dir .. "/doc/" if Util.file_exists(docs) then - self.output = vim.api.nvim_cmd({ cmd = "helptags", args = { docs } }, { output = true }) + self:log(vim.api.nvim_cmd({ cmd = "helptags", args = { docs } }, { output = true })) end end, } diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 2eca5bd..04ff937 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -106,15 +106,15 @@ function M.build(task) if not M.check({ error = function(msg) - task:notify_error(msg:gsub("[{}]", "`")) + task:error(msg:gsub("[{}]", "`")) end, warn = function(msg) - task:notify_warn(msg) + task:warn(msg) end, ok = function(msg) end, }) then - task:notify_warn({ + task:log({ "", "This plugin requires `luarocks`. Try one of the following:", " - fix your `luarocks` installation", diff --git a/lua/lazy/view/colors.lua b/lua/lazy/view/colors.lua index e55c56b..c1dbe50 100644 --- a/lua/lazy/view/colors.lua +++ b/lua/lazy/view/colors.lua @@ -30,8 +30,9 @@ M.colors = { Button = "CursorLine", ButtonActive = "Visual", TaskOutput = "MsgArea", -- task output - TaskError = "ErrorMsg", -- task errors - TaskWarning = "WarningMsg", -- task errors + Error = "DiagnosticError", -- task errors + Warning = "DiagnosticWarn", -- task errors + Info = "DiagnosticInfo", -- task errors Dir = "@markup.link", -- directory Url = "@markup.link", -- url Bold = { bold = true }, diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index a2c33c1..00ebd8f 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -354,6 +354,31 @@ end ---@param plugin LazyPlugin function M:diagnostics(plugin) + local skip = false + for _, task in ipairs(plugin._.tasks or {}) do + if task:is_running() then + self:diagnostic({ + severity = vim.diagnostic.severity.WARN, + message = task.name .. (task:status() and (": " .. task:status()) or ""), + }) + skip = true + elseif task:has_errors() then + self:diagnostic({ + message = task.name .. " failed", + severity = vim.diagnostic.severity.ERROR, + }) + skip = true + elseif task:has_warnings() then + self:diagnostic({ + message = task.name .. " warning", + severity = vim.diagnostic.severity.WARN, + }) + skip = true + end + end + if skip then + return + end if plugin._.updated then if plugin._.updated.from == plugin._.updated.to then self:diagnostic({ @@ -383,24 +408,6 @@ function M:diagnostics(plugin) }) end end - for _, task in ipairs(plugin._.tasks or {}) do - if task:is_running() then - self:diagnostic({ - severity = vim.diagnostic.severity.WARN, - message = task.name .. (task.status == "" and "" or (": " .. task.status)), - }) - elseif task.error then - self:diagnostic({ - message = task.name .. " failed", - severity = vim.diagnostic.severity.ERROR, - }) - elseif task.warn then - self:diagnostic({ - message = task.name .. " warning", - severity = vim.diagnostic.severity.WARN, - }) - end - end end ---@param plugin LazyPlugin @@ -463,24 +470,27 @@ function M:tasks(plugin) self:append(" " .. math.floor((task:time()) * 100) / 100 .. "ms", "Bold") self:nl() end - if task.error then - self:markdown(task.error, "LazyTaskError", { indent = 6 }) - end - if task.warn then - self:markdown(task.warn, "LazyTaskWarning", { indent = 6 }) - end - if not task.error and not task.warn and task.name == "log" then + + if not task:has_warnings() and task.name == "log" then self:log(task) - end - if (self.view:is_selected(plugin) or (task.error or task.warn)) and task.output ~= task.error then - self:markdown(vim.trim(task.output), "LazyTaskOutput", { indent = 6 }) + else + local hls = { + [vim.log.levels.ERROR] = "LazyError", + [vim.log.levels.WARN] = "LazyWarning", + [vim.log.levels.INFO] = "LazyInfo", + } + for _, msg in ipairs(task:get_log()) do + if task:has_warnings() or self.view:is_selected(plugin) then + self:markdown(msg.msg, hls[msg.level] or "LazyTaskOutput", { indent = 6 }) + end + end end end end ---@param task LazyTask function M:log(task) - local log = vim.trim(task.output) + local log = vim.trim(task:output()) if log ~= "" then local lines = vim.split(log, "\n") for _, line in ipairs(lines) do diff --git a/lua/lazy/view/sections.lua b/lua/lazy/view/sections.lua index 5dfb57e..e2892a2 100644 --- a/lua/lazy/view/sections.lua +++ b/lua/lazy/view/sections.lua @@ -17,7 +17,7 @@ return { { filter = function(plugin) return has_task(plugin, function(task) - return task.error ~= nil + return task:has_errors() end) end, title = "Failed", @@ -39,8 +39,7 @@ return { if task.name ~= "log" then return end - local lines = vim.split(task.output, "\n") - for _, line in ipairs(lines) do + for _, line in ipairs(vim.split(task:output(), "\n")) do if line:find("^%w+ %S+!:") then return true end @@ -71,7 +70,7 @@ return { { filter = function(plugin) return has_task(plugin, function(task) - return task.name == "log" and vim.trim(task.output) ~= "" + return task.name == "log" and vim.trim(task:output()) ~= "" end) end, title = "Log", @@ -89,7 +88,7 @@ return { title = "Not Installed", }, { - filter = function (plugin) + filter = function(plugin) return plugin._.outdated end, title = "Outdated", From 206d2080189e44c536d107f15c2ba2dc6fc1b6ea Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 18:42:52 +0200 Subject: [PATCH 611/815] test: fix tests --- lua/lazy/manage/runner.lua | 15 ++++++++------- lua/lazy/manage/task/init.lua | 2 +- tests/manage/task_spec.lua | 14 +++++++------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index e517ddc..0b0e5c4 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -81,7 +81,7 @@ function Runner:_start() ---@param resume? boolean local function continue(resume) - active = #names + active = 0 waiting = 0 wait_step = nil for _, name in ipairs(names) do @@ -90,19 +90,18 @@ function Runner:_start() local running = s.task and s.task:is_running() local step = self._pipeline[s.step] - if step and step.task == "wait" and not resume then + if s.task and s.task:has_errors() then + local ignore = true + elseif step and step.task == "wait" and not resume then waiting = waiting + 1 - active = active - 1 wait_step = s.step elseif not running then local plugin = self:plugin(name) - if s.task and s.task:has_errors() then - active = active - 1 - elseif s.step == #self._pipeline then + if s.step == #self._pipeline then s.task = nil - active = active - 1 plugin._.working = false elseif s.step < #self._pipeline then + active = active + 1 s.step = s.step + 1 step = self._pipeline[s.step] if step.task == "wait" then @@ -112,6 +111,8 @@ function Runner:_start() plugin._.working = not not s.task end end + else + active = active + 1 end end end diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 496dac9..8c5f83f 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -182,7 +182,7 @@ function Task:spawn(cmd, opts) local running = true ---@param output string function opts.on_exit(ok, output) - self:log(output, ok and vim.log.levels.DEBUG or vim.log.levels.ERROR) + self:log(vim.trim(output), ok and vim.log.levels.DEBUG or vim.log.levels.ERROR) if on_exit then pcall(on_exit, ok, output) end diff --git a/tests/manage/task_spec.lua b/tests/manage/task_spec.lua index 11487c5..adb01e8 100644 --- a/tests/manage/task_spec.lua +++ b/tests/manage/task_spec.lua @@ -38,7 +38,7 @@ describe("task", function() assert(not task:is_running()) assert(task_result.done) assert(task_result.error) - assert(task.error and task.error:find("test")) + assert(task:has_errors() and task:output(vim.log.levels.ERROR):find("test")) end) it("async", function() @@ -56,7 +56,7 @@ describe("task", function() assert(not running) assert(not task:is_running()) assert(task_result.done) - assert(not task.error) + assert(not task:has_errors()) end) it("spawn errors", function() @@ -68,7 +68,7 @@ describe("task", function() task:wait() assert(not task:is_running()) assert(task_result.done) - assert(task.error and task.error:find("Failed to spawn"), task.output) + assert(task:has_errors() and task:output(vim.log.levels.ERROR):find("Failed to spawn"), task.output) end) it("spawn", function() @@ -80,9 +80,9 @@ describe("task", function() assert(task:has_started()) assert(task:is_running()) task:wait() - assert.same(task.output, "foo\n") + assert.same(task:output(), "foo") assert(task_result.done) - assert(not task.error) + assert(not task:has_errors()) end) it("spawn 2x", function() @@ -94,8 +94,8 @@ describe("task", function() assert(task:is_running()) assert(task:is_running()) task:wait() - assert(task.output == "foo\nbar\n" or task.output == "bar\nfoo\n", task.output) + assert(task:output() == "foo\nbar" or task:output() == "bar\nfoo", task:output()) assert(task_result.done) - assert(not task.error) + assert(not task:has_errors()) end) end) From 56075b57c421fc5e751c1da7a7f1bf18ec1499a7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 18:45:40 +0200 Subject: [PATCH 612/815] fix(runner): bring concurrency back --- lua/lazy/manage/runner.lua | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 0b0e5c4..eac6b3e 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -96,19 +96,21 @@ function Runner:_start() waiting = waiting + 1 wait_step = s.step elseif not running then - local plugin = self:plugin(name) - if s.step == #self._pipeline then - s.task = nil - plugin._.working = false - elseif s.step < #self._pipeline then - active = active + 1 - s.step = s.step + 1 - step = self._pipeline[s.step] - if step.task == "wait" then + if not self._opts.concurrency or active < self._opts.concurrency then + local plugin = self:plugin(name) + if s.step == #self._pipeline then + s.task = nil plugin._.working = false - else - s.task = self:queue(plugin, step) - plugin._.working = not not s.task + elseif s.step < #self._pipeline then + active = active + 1 + s.step = s.step + 1 + step = self._pipeline[s.step] + if step.task == "wait" then + plugin._.working = false + else + s.task = self:queue(plugin, step) + plugin._.working = not not s.task + end end end else From 20af3fcc4ef2fef0cb4021543c70410567fcf9aa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 26 Jun 2024 18:47:38 +0200 Subject: [PATCH 613/815] chore(main): release 11.4.2 (#1558) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 18 ++++++++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 8aab173..6d1ef85 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.4.1" + ".": "11.4.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 741e766..e54cefe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## [11.4.2](https://github.com/folke/lazy.nvim/compare/v11.4.1...v11.4.2) (2024-06-26) + + +### Bug Fixes + +* **config:** dont start checker/change_detection when running headless ([2aa8e06](https://github.com/folke/lazy.nvim/commit/2aa8e061f22579b0cabc74f05a90f7344d92195c)) +* **git:** fetch commit from origin or local to check if branch was changed. See [#1549](https://github.com/folke/lazy.nvim/issues/1549) ([28e435b](https://github.com/folke/lazy.nvim/commit/28e435b7f34eecd8b90bc87ac71c70b79fcb03b3)) +* **rocks:** build.type instead of build.build_type ([aa1c957](https://github.com/folke/lazy.nvim/commit/aa1c9572aa1916e582f9b9c3d43e272b4f23b326)) +* **rockspec:** dont lazy-load rock deps ([4733611](https://github.com/folke/lazy.nvim/commit/473361139cc05936cd5afb08ab68e5bee1ebb5b3)) +* **runner:** bring concurrency back ([56075b5](https://github.com/folke/lazy.nvim/commit/56075b57c421fc5e751c1da7a7f1bf18ec1499a7)) +* **ui:** don't show output when it's the same as error ([e79805d](https://github.com/folke/lazy.nvim/commit/e79805d706f815a62467260cb307844c368c3dba)) + + +### Performance Improvements + +* tasks are now fully async ([0614ca6](https://github.com/folke/lazy.nvim/commit/0614ca6ca629704cb1846c0d6f9a250b526900b9)) +* **util:** improve impl of throttle ([3695215](https://github.com/folke/lazy.nvim/commit/36952153ecb5b196c74e2d9a28eb0e01a9eb02fe)) + ## [11.4.1](https://github.com/folke/lazy.nvim/compare/v11.4.0...v11.4.1) (2024-06-25) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 73e0970..a6d3c3a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -197,7 +197,7 @@ M.defaults = { debug = false, } -M.version = "11.4.1" -- x-release-please-version +M.version = "11.4.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 804cae0a65ade8b1638eb1ccb537c2ff793459ce Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 19:38:45 +0200 Subject: [PATCH 614/815] refactor: hererocks check --- lua/lazy/core/plugin.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index a3cb497..84660e6 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -264,10 +264,8 @@ function M.update_rocks_state() end) for _, plugin in pairs(Config.plugins) do - if plugin.build == "rockspec" then + if plugin.build == "rockspec" or plugin.name == "hererocks" then plugin._.build = not installed[plugin.name] - elseif plugin.name == "hererocks" then - plugin._.build = not vim.uv.fs_stat(Config.options.rocks.root .. "/hererocks") end end end From 97f4df0824da13b2b0d065f0dc43c49862581a01 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 19:39:08 +0200 Subject: [PATCH 615/815] fix(runner): only use Config.plugins when updated. Fixes #1560 --- lua/lazy/manage/init.lua | 8 ++++++-- lua/lazy/manage/runner.lua | 9 ++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index e0b2233..9818764 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -85,9 +85,11 @@ function M.install(opts) "plugin.docs", { "wait", - sync = function() + ---@param runner Runner + sync = function(runner) require("lazy.pkg").update() Plugin.load() + runner:update() end, }, "plugin.build", @@ -114,9 +116,11 @@ function M.update(opts) "plugin.docs", { "wait", - sync = function() + ---@param runner Runner + sync = function(runner) require("lazy.pkg").update() Plugin.load() + runner:update() end, }, "plugin.build", diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index eac6b3e..8828412 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -49,7 +49,14 @@ function Runner.new(opts) end function Runner:plugin(name) - return Config.plugins[name] or self._plugins[name] + return self._plugins[name] +end + +--- Update plugins +function Runner:update() + for name in pairs(self._plugins) do + self._plugins[name] = Config.plugins[name] or self._plugins[name] + end end function Runner:start() From 66a4170f0e9ab238972f73a268582cf65026a017 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 19:58:45 +0200 Subject: [PATCH 616/815] fix(runner): properly do concurrency --- lua/lazy/manage/runner.lua | 58 +++++++++++++++++++++++------------- tests/manage/runner_spec.lua | 2 +- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 8828412..66d5f9c 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -91,37 +91,53 @@ function Runner:_start() active = 0 waiting = 0 wait_step = nil + local next = {} ---@type string[] + + -- check running tasks for _, name in ipairs(names) do state[name] = state[name] or { step = 0 } local s = state[name] - local running = s.task and s.task:is_running() + local is_running = s.task and s.task:is_running() local step = self._pipeline[s.step] + -- selene:allow(empty_if) if s.task and s.task:has_errors() then - local ignore = true + -- don't continue tasks if there are errors elseif step and step.task == "wait" and not resume then + -- waiting for sync waiting = waiting + 1 wait_step = s.step - elseif not running then - if not self._opts.concurrency or active < self._opts.concurrency then - local plugin = self:plugin(name) - if s.step == #self._pipeline then - s.task = nil - plugin._.working = false - elseif s.step < #self._pipeline then - active = active + 1 - s.step = s.step + 1 - step = self._pipeline[s.step] - if step.task == "wait" then - plugin._.working = false - else - s.task = self:queue(plugin, step) - plugin._.working = not not s.task - end - end - end - else + elseif is_running then + -- still running active = active + 1 + else + next[#next + 1] = name + end + end + + -- schedule next tasks + for _, name in ipairs(next) do + if self._opts.concurrency and active >= self._opts.concurrency then + break + end + local s = state[name] + local plugin = self:plugin(name) + if s.step == #self._pipeline then + -- done + s.task = nil + plugin._.working = false + elseif s.step < #self._pipeline then + -- next + s.step = s.step + 1 + local step = self._pipeline[s.step] + if step.task == "wait" then + plugin._.working = false + waiting = waiting + 1 + else + s.task = self:queue(plugin, step) + plugin._.working = not not s.task + active = active + 1 + end end end end diff --git a/tests/manage/runner_spec.lua b/tests/manage/runner_spec.lua index 2eb1ab1..925aaf1 100644 --- a/tests/manage/runner_spec.lua +++ b/tests/manage/runner_spec.lua @@ -64,7 +64,7 @@ describe("runner", function() local runner = Runner.new({ plugins = plugins, pipeline = { "test.test1", "test.skip", "test.test2" } }) runner:start() runner:wait() - assert.equal(4, #runs) + assert.equal(4, #runs, runs) end) it("handles opts", function() From 93b3a77286c4212850e21a6b3e31d328b5a86df4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 20:17:32 +0200 Subject: [PATCH 617/815] fix(runner): wait_step --- lua/lazy/manage/runner.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 66d5f9c..2d707c2 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -133,6 +133,7 @@ function Runner:_start() if step.task == "wait" then plugin._.working = false waiting = waiting + 1 + wait_step = s.step else s.task = self:queue(plugin, step) plugin._.working = not not s.task From a0a51c06c2fcddda925667142516c89777eb0c8e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 21:38:28 +0200 Subject: [PATCH 618/815] feat: added `opts.headless` to control ansi output when running headless --- lua/lazy/core/config.lua | 11 ++++++ lua/lazy/manage/process.lua | 6 +++ lua/lazy/manage/task/init.lua | 59 ++++++++++++++++++++++++++++- lua/lazy/terminal.lua | 71 +++++++++++++++++++++++++++++++++++ tests/busted.lua | 16 ++++---- 5 files changed, 153 insertions(+), 10 deletions(-) create mode 100644 lua/lazy/terminal.lua diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index a6d3c3a..89a89bd 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -130,6 +130,17 @@ M.defaults = { }, }, }, + -- Output options for headless mode + headless = { + -- show the output from process commands like git + process = true, + -- show log messages + log = true, + -- show task start/end + task = true, + -- use ansi colors + colors = true, + }, diff = { -- diff command can be one of: -- * browser: opens the github compare view. Note that this is always mapped to as well, diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index 5bb2716..7c568cb 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -48,6 +48,7 @@ local uv = vim.uv ---@field cwd? string ---@field on_line? fun(string) ---@field on_exit? fun(ok:boolean, output:string) +---@field on_data? fun(string) ---@field timeout? number ---@field env? table @@ -145,6 +146,11 @@ function M.spawn(cmd, opts) assert(not err, err) if data then + if opts.on_data then + vim.schedule(function() + opts.on_data(data) + end) + end output = output .. data:gsub("\r\n", "\n") local lines = vim.split(vim.trim(output:gsub("\r$", "")):gsub("[^\n\r]+\r", ""), "\n") diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 8c5f83f..d561151 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -1,5 +1,9 @@ local Async = require("lazy.async") +local Config = require("lazy.core.config") local Process = require("lazy.manage.process") +local Terminal = require("lazy.terminal") + +local colors = Config.options.headless.colors ---@class LazyTaskDef ---@field skip? fun(plugin:LazyPlugin, opts?:TaskOptions):any? @@ -96,6 +100,10 @@ function Task:_start(task) assert(not self:has_started(), "task already started") assert(not self:has_ended(), "task already done") + if Config.headless() and Config.options.headless.task then + self:log("Running task " .. self.name, vim.log.levels.INFO) + end + self._started = vim.uv.hrtime() ---@async self._running = Async.run(function() @@ -122,6 +130,27 @@ function Task:log(msg, level) ---@cast msg string table.insert(self._log, { msg = msg, level = level }) vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) + if Config.headless() then + self:headless() + end +end + +function Task:headless() + if not Config.options.headless.log then + return + end + local msg = self._log[#self._log] + if not msg or msg.level == vim.log.levels.TRACE then + return + end + local map = { + [vim.log.levels.ERROR] = Terminal.red, + [vim.log.levels.WARN] = Terminal.yellow, + [vim.log.levels.INFO] = Terminal.blue, + } + local color = Config.options.headless.colors and map[msg.level] + io.write(Terminal.prefix(color and color(msg.msg) or msg.msg, self:prefix())) + io.write("\n") end ---@param msg string|string[] @@ -143,6 +172,10 @@ function Task:_done() return end + if Config.headless() and Config.options.headless.task then + local ms = math.floor(self:time() + 0.5) + self:log("Finished task " .. self.name .. " in " .. ms .. "ms", vim.log.levels.INFO) + end self._ended = vim.uv.hrtime() if self._opts.on_done then self._opts.on_done(self) @@ -172,8 +205,12 @@ function Task:spawn(cmd, opts) local on_line = opts.on_line local on_exit = opts.on_exit + local headless = Config.headless() and Config.options.headless.process + function opts.on_line(line) - self:log(line, vim.log.levels.TRACE) + if not headless then + return self:log(line, vim.log.levels.TRACE) + end if on_line then pcall(on_line, line) end @@ -182,18 +219,36 @@ function Task:spawn(cmd, opts) local running = true ---@param output string function opts.on_exit(ok, output) - self:log(vim.trim(output), ok and vim.log.levels.DEBUG or vim.log.levels.ERROR) + if not headless then + self:log(vim.trim(output), ok and vim.log.levels.DEBUG or vim.log.levels.ERROR) + end if on_exit then pcall(on_exit, ok, output) end running = false end + + if headless then + opts.on_data = function(data) + -- prefix with plugin name + local prefix = self:prefix() + io.write(Terminal.prefix(data, prefix)) + end + end Process.spawn(cmd, opts) while running do coroutine.yield() end end +function Task:prefix() + local plugin = "[" .. self.plugin.name .. "] " + local task = string.rep(" ", 20 - #(self.name .. self.plugin.name)) .. self.name + + return colors and Terminal.magenta(plugin) .. Terminal.cyan(task) .. Terminal.bright_black(" | ") + or plugin .. " " .. task .. " | " +end + function Task:wait() while self:is_running() do vim.wait(10) diff --git a/lua/lazy/terminal.lua b/lua/lazy/terminal.lua new file mode 100644 index 0000000..a1bcb84 --- /dev/null +++ b/lua/lazy/terminal.lua @@ -0,0 +1,71 @@ +---@class Ansi: table +local M = {} + +M.colors = { + reset = "\27[0m", + black = "\27[30m", + red = "\27[31m", + green = "\27[32m", + yellow = "\27[33m", + blue = "\27[34m", + magenta = "\27[35m", + cyan = "\27[36m", + white = "\27[37m", + bright_black = "\27[90m", + bright_red = "\27[91m", + bright_green = "\27[92m", + bright_yellow = "\27[93m", + bright_blue = "\27[94m", + bright_magenta = "\27[95m", + bright_cyan = "\27[96m", + bright_white = "\27[97m", +} + +function M.color(text, color) + return M.colors[color] .. text .. M.colors.reset +end + +-- stylua: ignore start +function M.black(text) return M.color(text, "black") end +function M.red(text) return M.color(text, "red") end +function M.green(text) return M.color(text, "green") end +function M.yellow(text) return M.color(text, "yellow") end +function M.blue(text) return M.color(text, "blue") end +function M.magenta(text) return M.color(text, "magenta") end +function M.cyan(text) return M.color(text, "cyan") end +function M.white(text) return M.color(text, "white") end +function M.bright_black(text) return M.color(text, "bright_black") end +function M.bright_red(text) return M.color(text, "bright_red") end +function M.bright_green(text) return M.color(text, "bright_green") end +function M.bright_yellow(text) return M.color(text, "bright_yellow") end +function M.bright_blue(text) return M.color(text, "bright_blue") end +function M.bright_magenta(text) return M.color(text, "bright_magenta") end +function M.bright_cyan(text) return M.color(text, "bright_cyan") end +function M.bright_white(text) return M.color(text, "bright_white") end +-- stylua: ignore end + +---@param data string +---@param prefix string +function M.prefix(data, prefix) + -- Normalize Windows-style newlines to simple newlines + data = data:gsub("\r\n", "\n") + + -- Handle prefix for the first line, if data starts immediately + data = prefix .. data + + -- Prefix new lines ensuring not to double prefix if a line starts with \r + data = data:gsub("(\n)([^\r])", "%1" .. prefix .. "%2") + + -- Handle carriage returns properly to avoid double prefixing + -- Replace any \r not followed by \n with \r, then add a prefix only if the following character isn't the start of our prefix + data = data:gsub("\r([^\n])", function(nextChar) + if nextChar:sub(1, #prefix) == prefix then + return "\r" .. nextChar + else + return "\r" .. prefix .. nextChar + end + end) + return data +end + +return M diff --git a/tests/busted.lua b/tests/busted.lua index 146ab96..8fd4f28 100755 --- a/tests/busted.lua +++ b/tests/busted.lua @@ -6,22 +6,22 @@ for _, name in ipairs({ "config", "data", "state", "cache" }) do vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name end --- -- Bootstrap lazy.nvim --- local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" --- if not (vim.uv or vim.loop).fs_stat(lazypath) then --- local lazyrepo = "https://github.com/folke/lazy.nvim.git" --- vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) --- end --- vim.opt.rtp:prepend(lazypath) vim.opt.rtp:prepend(".") vim.o.loadplugins = true -- enable since nvim -l disables plugins -- Setup lazy.nvim require("lazy").setup({ - "lunarmodules/busted", -- add busted + spec = { + "lunarmodules/busted", -- add busted + }, + rocks = { hererocks = true }, }) +local Config = require("lazy.core.config") +-- disable termnial output for the tests +Config.options.headless = {} + -- run busted return pcall(require("busted.runner"), { standalone = false, From 249902ab3194226efec0dbc3e000e758c43b4714 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 22:44:57 +0200 Subject: [PATCH 619/815] fix(ui): diagnostics without status --- lua/lazy/manage/task/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index d561151..6693adc 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -71,7 +71,8 @@ end function Task:status() local ret = self._log[#self._log] - return ret and ret.msg or "" + local msg = ret and vim.trim(ret.msg) or "" + return msg ~= "" and msg or nil end function Task:has_started() From 591ded8309e45806ae3fb58b7b68fe58785a3ada Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 26 Jun 2024 22:45:21 +0200 Subject: [PATCH 620/815] feat(ui): keep cursor position when rendering view --- lua/lazy/manage/runner.lua | 2 +- lua/lazy/view/init.lua | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 2d707c2..6a01609 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -136,7 +136,7 @@ function Runner:_start() wait_step = s.step else s.task = self:queue(plugin, step) - plugin._.working = not not s.task + plugin._.working = true active = active + 1 end end diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 5702531..c531927 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -146,7 +146,11 @@ end function M:update() if self.buf and vim.api.nvim_buf_is_valid(self.buf) then vim.bo[self.buf].modifiable = true + local view = vim.api.nvim_win_call(self.view.win, vim.fn.winsaveview) self.render:update() + vim.api.nvim_win_call(self.view.win, function() + vim.fn.winrestview(view) + end) vim.bo[self.buf].modifiable = false vim.cmd.redraw() end From 24a86d5ca4652a77f0f2c78dd7c693a3c369ab68 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 09:48:37 +0200 Subject: [PATCH 621/815] fix(pkg): only show pkg changed when effectively changing a pkg file. Fixes #1567 --- lua/lazy/core/config.lua | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 89a89bd..d5c21b0 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -311,11 +311,10 @@ function M.setup(opts) vim.api.nvim_create_autocmd("BufWritePost", { pattern = { "lazy.lua", "pkg.json", "*.rockspec" }, callback = function() - require("lazy").pkg({ - plugins = { - require("lazy.core.plugin").find(vim.uv.cwd() .. "/lua/"), - }, - }) + local plugin = require("lazy.core.plugin").find(vim.uv.cwd() .. "/lua/") + if plugin then + require("lazy").pkg({ plugins = { plugin } }) + end end, }) end, From 6a423278a10ff7b1a76795275111d01632851c48 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 10:21:54 +0200 Subject: [PATCH 622/815] fix(meta): resolve deps from meta instead of fragments. Fixes #1566 --- lua/lazy/core/meta.lua | 5 +- tests/core/plugin_spec.lua | 99 ++++++++++++++++++++++++++++---------- 2 files changed, 77 insertions(+), 27 deletions(-) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 52b0549..6e781a0 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -198,7 +198,10 @@ function M:_rebuild(name) -- dependencies for _, dep in ipairs(fragment.deps or {}) do - table.insert(plugin.dependencies, self.fragments:get(dep).name) + local dep_meta = self.frag_to_meta[dep] + if dep_meta then + table.insert(plugin.dependencies, dep_meta.name) + end end end end diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index 87cea77..d810339 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -8,20 +8,27 @@ local function inspect(obj) return vim.inspect(obj):gsub("%s+", " ") end ----@param plugins LazyPlugin[]|LazyPlugin +---@param plugin LazyPlugin +local function resolve(plugin) + local meta = getmetatable(plugin) + local ret = meta and type(meta.__index) == "table" and resolve(meta.__index) or {} + for k, v in pairs(plugin) do + ret[k] = v + end + return ret +end + +---@param plugins LazyPlugin[] local function clean(plugins) - local p = plugins - plugins = type(plugins) == "table" and plugins or { plugins } - for _, plugin in pairs(plugins) do - plugin._.fid = nil - plugin._.fpid = nil - plugin._.fdeps = nil + return vim.tbl_map(function(plugin) + plugin = resolve(plugin) + plugin[1] = nil plugin._.frags = nil if plugin._.dep == false then plugin._.dep = nil end - end - return p + return plugin + end, plugins) end describe("plugin spec url/name", function() @@ -168,14 +175,12 @@ describe("plugin spec opt", function() end assert.same({ bar = { - "foo/bar", _ = {}, dependencies = { "dep1", "dep2" }, name = "bar", url = "https://github.com/foo/bar.git", }, dep1 = { - "foo/dep1", _ = { dep = true, }, @@ -183,7 +188,6 @@ describe("plugin spec opt", function() url = "https://github.com/foo/dep1.git", }, dep2 = { - "foo/dep2", _ = { dep = true, }, @@ -198,13 +202,13 @@ describe("plugin spec opt", function() before_each(function() Handler.init() end) - it("handles dep names", function() - Config.options.defaults.lazy = false - local tests = { - { { "foo/bar", dependencies = { { "dep1" }, "foo/dep2" } }, "foo/dep1" }, - { "foo/dep1", { "foo/bar", dependencies = { { "dep1" }, "foo/dep2" } } }, - } - for _, test in ipairs(tests) do + Config.options.defaults.lazy = false + local tests = { + { { "foo/bar", dependencies = { { "dep1" }, "foo/dep2" } }, "foo/dep1" }, + { "foo/dep1", { "foo/bar", dependencies = { { "dep1" }, "foo/dep2" } } }, + } + for _, test in ipairs(tests) do + it("handles dep names " .. inspect(test), function() local spec = Plugin.Spec.new(vim.deepcopy(test)) assert(#spec.notifs == 0) Config.plugins = spec.plugins @@ -213,31 +217,74 @@ describe("plugin spec opt", function() for _, plugin in pairs(spec.plugins) do plugin.dir = nil end - assert.same(clean(spec.plugins), { + assert.same({ bar = { - "foo/bar", _ = {}, dependencies = { "dep1", "dep2" }, name = "bar", url = "https://github.com/foo/bar.git", }, dep1 = { - "foo/dep1", _ = {}, name = "dep1", url = "https://github.com/foo/dep1.git", }, dep2 = { - "foo/dep2", _ = { dep = true, }, name = "dep2", url = "https://github.com/foo/dep2.git", }, - }) - end - end) + }, clean(spec.plugins)) + end) + end + + Config.options.defaults.lazy = false + local tests = { + { + { "foo/baz", name = "bar" }, + { "foo/fee", dependencies = { "foo/baz" } }, + }, + { + { "foo/fee", dependencies = { "foo/baz" } }, + { "foo/baz", name = "bar" }, + }, + -- { + -- { "foo/baz", name = "bar" }, + -- { "foo/fee", dependencies = { "baz" } }, + -- }, + { + { "foo/baz", name = "bar" }, + { "foo/fee", dependencies = { "bar" } }, + }, + } + for _, test in ipairs(tests) do + it("handles dep names " .. inspect(test), function() + local spec = Plugin.Spec.new(vim.deepcopy(test)) + assert(#spec.notifs == 0) + Config.plugins = spec.plugins + Plugin.update_state() + spec = Plugin.Spec.new(test) + spec.meta:rebuild() + for _, plugin in pairs(spec.plugins) do + plugin.dir = nil + end + assert.same({ + bar = { + _ = {}, + name = "bar", + url = "https://github.com/foo/baz.git", + }, + fee = { + _ = {}, + name = "fee", + url = "https://github.com/foo/fee.git", + dependencies = { "bar" }, + }, + }, clean(spec.plugins)) + end) + end it("handles opt from dep", function() Config.options.defaults.lazy = false From 9c8e7a48406109458370f3b52f6f058943db40f4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 10:44:35 +0200 Subject: [PATCH 623/815] feat(health): show user's lazy.nvim version in checkhealth --- lua/lazy/health.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 86e805d..2e5781e 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -62,6 +62,7 @@ end function M.check() start("lazy.nvim") + info("{lazy.nvim} version `" .. Config.version .. "`") M.have("git") From 2e1167df4ab055e8327317ac38210b111cbaec83 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 11:30:29 +0200 Subject: [PATCH 624/815] feat: added localleader-i to inspect a plugin --- lua/lazy/core/config.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index d5c21b0..63c52c8 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -120,6 +120,16 @@ M.defaults = { desc = "Open lazygit log", }, + ["i"] = { + function(plugin) + Util.notify(vim.inspect(plugin), { + title = "Inspect " .. plugin.name, + lang = "lua", + }) + end, + desc = "Inspect Plugin", + }, + ["t"] = { function(plugin) require("lazy.util").float_term(nil, { From 53f314d9e6ef594677acdf5f038a4a042a7f3e38 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 11:31:20 +0200 Subject: [PATCH 625/815] feat(ui): show indication of plugins that need build. See #1563 --- lua/lazy/view/render.lua | 7 ++++++- lua/lazy/view/sections.lua | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 00ebd8f..6d0e758 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -379,7 +379,12 @@ function M:diagnostics(plugin) if skip then return end - if plugin._.updated then + if plugin._.build then + self:diagnostic({ + message = "needs build", + severity = vim.diagnostic.severity.WARN, + }) + elseif plugin._.updated then if plugin._.updated.from == plugin._.updated.to then self:diagnostic({ message = "already up to date", diff --git a/lua/lazy/view/sections.lua b/lua/lazy/view/sections.lua index e2892a2..c9fd9a7 100644 --- a/lua/lazy/view/sections.lua +++ b/lua/lazy/view/sections.lua @@ -33,6 +33,12 @@ return { end, title = "Working", }, + { + filter = function(plugin) + return plugin._.build + end, + title = "Build", + }, { filter = function(plugin) return has_task(plugin, function(task) From a0391c3e21e063df9dee70f17ae7891497cdcec9 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 11:32:00 +0200 Subject: [PATCH 626/815] fix(manage): dont skip install for plugins that need a build, but dont have an url (like local plugins). Fixes #1563 --- lua/lazy/manage/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 9818764..55c5076 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -95,7 +95,7 @@ function M.install(opts) "plugin.build", }, plugins = function(plugin) - return plugin.url and not (plugin._.installed and not plugin._.build) + return not (plugin._.installed and not plugin._.build) end, }, opts):wait(function() require("lazy.manage.lock").update() From e02c5b1b5787210dfbf89681d94e7861b30aa139 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 11:32:30 +0200 Subject: [PATCH 627/815] fix(runner): only check for errors when a task is no longer running --- lua/lazy/manage/runner.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 6a01609..74d6254 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -100,16 +100,16 @@ function Runner:_start() local is_running = s.task and s.task:is_running() local step = self._pipeline[s.step] + if is_running then + -- still running + active = active + 1 -- selene:allow(empty_if) - if s.task and s.task:has_errors() then + elseif s.task and s.task:has_errors() then -- don't continue tasks if there are errors elseif step and step.task == "wait" and not resume then -- waiting for sync waiting = waiting + 1 wait_step = s.step - elseif is_running then - -- still running - active = active + 1 else next[#next + 1] = name end From 82276321f5132c680a852bec0bb9b55694ab2a21 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 11:33:11 +0200 Subject: [PATCH 628/815] fix(rocks): if installing with luarocks (binaries) fails, then build from source. Fixes #1563 --- lua/lazy/manage/task/init.lua | 10 +++++++++- lua/lazy/pkg/rockspec.lua | 27 ++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 6693adc..8dbffc5 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -37,7 +37,7 @@ function Task.new(plugin, name, task, opts) local self = setmetatable({}, { __index = Task }) self._opts = opts or {} self._log = {} - self._level = vim.log.levels.TRACE + self:set_level() self.plugin = plugin self.name = name ---@param other LazyTask @@ -95,6 +95,11 @@ function Task:has_warnings() return self._level >= vim.log.levels.WARN end +---@param level? number +function Task:set_level(level) + self._level = level or vim.log.levels.TRACE +end + ---@private ---@param task LazyTaskFn function Task:_start(task) @@ -218,6 +223,7 @@ function Task:spawn(cmd, opts) end local running = true + local ret = true ---@param output string function opts.on_exit(ok, output) if not headless then @@ -226,6 +232,7 @@ function Task:spawn(cmd, opts) if on_exit then pcall(on_exit, ok, output) end + ret = ok running = false end @@ -240,6 +247,7 @@ function Task:spawn(cmd, opts) while running do coroutine.yield() end + return ret end function Task:prefix() diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 04ff937..2580afa 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -101,6 +101,7 @@ function M.check(opts) return ok end +---@async ---@param task LazyTask function M.build(task) if @@ -163,7 +164,7 @@ function M.build(task) ) local root = Config.options.rocks.root .. "/" .. task.plugin.name - task:spawn(luarocks, { + local ok = task:spawn(luarocks, { args = { "--tree", root, @@ -181,6 +182,30 @@ function M.build(task) cwd = task.plugin.dir, env = env, }) + + if ok then + return + end + + task:warn("Failed installing " .. rockspec.package .. " with `luarocks`.\nTrying to build from source.") + + -- install failed, so try building from source + task:set_level() -- reset level + task:spawn(luarocks, { + args = { + "--tree", + root, + "--dev", + "--lua-version", + "5.1", + "make", + "--force-fast", + "--deps-mode", + "one", + }, + cwd = task.plugin.dir, + env = env, + }) end ---@param rockspec RockSpec From c0fd59b020dc4efb91b226b0bbc4a22f28c12321 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 12:31:58 +0200 Subject: [PATCH 629/815] feat(health): show steps to get luarocks working. See #1570 --- lua/lazy/health.lua | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 2e5781e..60cb61e 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -145,11 +145,21 @@ function M.check() info("you have some plugins that require `luarocks`:\n" .. table.concat(lines, "\n")) end - require("lazy.pkg.rockspec").check({ + local ok = require("lazy.pkg.rockspec").check({ error = #need_luarocks > 0 and error or warn, warn = warn, ok = ok, }) + if not ok then + warn(table.concat({ + "Lazy won't be able to install plugins that require `luarocks`.", + "Here's what you can do:", + " - fix your `luarocks` installation", + Config.options.rocks.hererocks and " - disable *hererocks* with `opts.rocks.hererocks = false`" + or " - enable `hererocks` with `opts.rocks.hererocks = true`", + " - disable `luarocks` support completely with `opts.rocks.enabled = false`", + }, "\n")) + end else ok("luarocks disabled") end From e3e431480d6c9ab460cf08b1e35311c2ab2c05c4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 12:38:47 +0200 Subject: [PATCH 630/815] feat(ui): remap gx -> K. Fixes #1561 --- lua/lazy/view/init.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index c531927..26383da 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -86,6 +86,8 @@ function M.create() return ViewConfig.keys.abort end, { silent = true, buffer = self.buf, expr = true }) + vim.keymap.set("n", "gx", "K", { buffer = self.buf, remap = true }) + -- plugin details self:on_key(ViewConfig.keys.details, function() local plugin = self.render:get_plugin() From 79bcc02d17edf026065bc4313e13363f1717f2d4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 12:48:50 +0200 Subject: [PATCH 631/815] ci: make simple test script --- .github/workflows/ci.yml | 2 +- lua/lazy/view/text.lua | 4 +--- tests/run | 3 +++ 3 files changed, 5 insertions(+), 4 deletions(-) create mode 100755 tests/run diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 647365c..d1f514d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ jobs: run: | nvim --version [ ! -d tests ] && exit 0 - nvim -l tests/busted.lua tests -o utfTerminal + ./tests/run community: runs-on: ubuntu-latest steps: diff --git a/lua/lazy/view/text.lua b/lua/lazy/view/text.lua index 3e83d5a..6a664a3 100644 --- a/lua/lazy/view/text.lua +++ b/lua/lazy/view/text.lua @@ -11,9 +11,7 @@ local Util = require("lazy.util") local Text = {} function Text.new() - local self = setmetatable({}, { - __index = Text, - }) + local self = setmetatable({}, { __index = Text }) self._lines = {} return self diff --git a/tests/run b/tests/run new file mode 100755 index 0000000..7c8bb34 --- /dev/null +++ b/tests/run @@ -0,0 +1,3 @@ +#!/bin/sh + +nvim -l tests/busted.lua tests -o utfTerminal From 68cee30cdb1f7a29d10b44b00506aafa092b6cee Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 13:06:39 +0200 Subject: [PATCH 632/815] perf: prevent active waiting in coroutines. suspend/resume instead --- lua/lazy/async.lua | 28 +++++++++++++++++++++++++++- lua/lazy/manage/task/init.lua | 8 +++++--- lua/lazy/util.lua | 10 +++------- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua index a7bcfac..1d348e9 100644 --- a/lua/lazy/async.lua +++ b/lua/lazy/async.lua @@ -9,10 +9,14 @@ local M = {} M._queue = {} M._executor = assert(vim.loop.new_check()) M._running = false +M.SLEEP = "sleep" +---@type Async +M.current = nil ---@class Async ---@field co thread ---@field opts AsyncOpts +---@field sleeping? boolean local Async = {} ---@param fn async fun() @@ -29,16 +33,38 @@ function Async:running() return coroutine.status(self.co) ~= "dead" end +function Async:sleep(ms) + self.sleeping = true + vim.defer_fn(function() + self.sleeping = false + end, ms) +end + +function Async:suspend() + self.sleeping = true +end + +function Async:resume() + self.sleeping = false +end + function Async:step() + if self.sleeping then + return true + end local status = coroutine.status(self.co) if status == "suspended" then + M.current = self local ok, res = coroutine.resume(self.co) + M.current = nil if not ok then if self.opts.on_error then self.opts.on_error(tostring(res)) end elseif res then - if self.opts.on_yield then + if res == M.SLEEP then + self.sleeping = true + elseif self.opts.on_yield then self.opts.on_yield(res) end end diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 8dbffc5..e651f63 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -222,6 +222,8 @@ function Task:spawn(cmd, opts) end end + self._running:suspend() + local running = true local ret = true ---@param output string @@ -234,6 +236,7 @@ function Task:spawn(cmd, opts) end ret = ok running = false + self._running:resume() end if headless then @@ -244,9 +247,8 @@ function Task:spawn(cmd, opts) end end Process.spawn(cmd, opts) - while running do - coroutine.yield() - end + coroutine.yield() + assert(not running, "process still running?") return ret end diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 09e4f54..4a3073e 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -232,13 +232,9 @@ end ---@async ---@param ms number function M.sleep(ms) - local continue = false - vim.defer_fn(function() - continue = true - end, ms) - while not continue do - coroutine.yield() - end + local async = require("lazy.async").current + assert(async, "Not in an async context") + async:sleep(ms) end function M._dump(value, result) From 37c7163f8d27243993ac07db8477e44cd5275027 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:34:05 +0200 Subject: [PATCH 633/815] chore(main): release 11.5.0 (#1565) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 31 +++++++++++++++++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 6d1ef85..1d395f3 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.4.2" + ".": "11.5.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index e54cefe..4c9fdb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # Changelog +## [11.5.0](https://github.com/folke/lazy.nvim/compare/v11.4.2...v11.5.0) (2024-06-27) + + +### Features + +* added `opts.headless` to control ansi output when running headless ([a0a51c0](https://github.com/folke/lazy.nvim/commit/a0a51c06c2fcddda925667142516c89777eb0c8e)) +* added localleader-i to inspect a plugin ([2e1167d](https://github.com/folke/lazy.nvim/commit/2e1167df4ab055e8327317ac38210b111cbaec83)) +* **health:** show steps to get luarocks working. See [#1570](https://github.com/folke/lazy.nvim/issues/1570) ([c0fd59b](https://github.com/folke/lazy.nvim/commit/c0fd59b020dc4efb91b226b0bbc4a22f28c12321)) +* **health:** show user's lazy.nvim version in checkhealth ([9c8e7a4](https://github.com/folke/lazy.nvim/commit/9c8e7a48406109458370f3b52f6f058943db40f4)) +* **ui:** keep cursor position when rendering view ([591ded8](https://github.com/folke/lazy.nvim/commit/591ded8309e45806ae3fb58b7b68fe58785a3ada)) +* **ui:** remap gx -> K. Fixes [#1561](https://github.com/folke/lazy.nvim/issues/1561) ([e3e4314](https://github.com/folke/lazy.nvim/commit/e3e431480d6c9ab460cf08b1e35311c2ab2c05c4)) +* **ui:** show indication of plugins that need build. See [#1563](https://github.com/folke/lazy.nvim/issues/1563) ([53f314d](https://github.com/folke/lazy.nvim/commit/53f314d9e6ef594677acdf5f038a4a042a7f3e38)) + + +### Bug Fixes + +* **manage:** dont skip install for plugins that need a build, but dont have an url (like local plugins). Fixes [#1563](https://github.com/folke/lazy.nvim/issues/1563) ([a0391c3](https://github.com/folke/lazy.nvim/commit/a0391c3e21e063df9dee70f17ae7891497cdcec9)) +* **meta:** resolve deps from meta instead of fragments. Fixes [#1566](https://github.com/folke/lazy.nvim/issues/1566) ([6a42327](https://github.com/folke/lazy.nvim/commit/6a423278a10ff7b1a76795275111d01632851c48)) +* **pkg:** only show pkg changed when effectively changing a pkg file. Fixes [#1567](https://github.com/folke/lazy.nvim/issues/1567) ([24a86d5](https://github.com/folke/lazy.nvim/commit/24a86d5ca4652a77f0f2c78dd7c693a3c369ab68)) +* **rocks:** if installing with luarocks (binaries) fails, then build from source. Fixes [#1563](https://github.com/folke/lazy.nvim/issues/1563) ([8227632](https://github.com/folke/lazy.nvim/commit/82276321f5132c680a852bec0bb9b55694ab2a21)) +* **runner:** only check for errors when a task is no longer running ([e02c5b1](https://github.com/folke/lazy.nvim/commit/e02c5b1b5787210dfbf89681d94e7861b30aa139)) +* **runner:** only use Config.plugins when updated. Fixes [#1560](https://github.com/folke/lazy.nvim/issues/1560) ([97f4df0](https://github.com/folke/lazy.nvim/commit/97f4df0824da13b2b0d065f0dc43c49862581a01)) +* **runner:** properly do concurrency ([66a4170](https://github.com/folke/lazy.nvim/commit/66a4170f0e9ab238972f73a268582cf65026a017)) +* **runner:** wait_step ([93b3a77](https://github.com/folke/lazy.nvim/commit/93b3a77286c4212850e21a6b3e31d328b5a86df4)) +* **ui:** diagnostics without status ([249902a](https://github.com/folke/lazy.nvim/commit/249902ab3194226efec0dbc3e000e758c43b4714)) + + +### Performance Improvements + +* prevent active waiting in coroutines. suspend/resume instead ([68cee30](https://github.com/folke/lazy.nvim/commit/68cee30cdb1f7a29d10b44b00506aafa092b6cee)) + ## [11.4.2](https://github.com/folke/lazy.nvim/compare/v11.4.1...v11.4.2) (2024-06-26) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 63c52c8..501f579 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -218,7 +218,7 @@ M.defaults = { debug = false, } -M.version = "11.4.2" -- x-release-please-version +M.version = "11.5.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 461552474c0646204399316228488edda63e9046 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 27 Jun 2024 14:43:35 +0200 Subject: [PATCH 634/815] refactor: cleanup --- lua/lazy/async.lua | 12 ++++++++---- lua/lazy/manage/task/init.lua | 22 +++++++--------------- lua/lazy/util.lua | 8 -------- tests/manage/task_spec.lua | 7 ------- 4 files changed, 15 insertions(+), 34 deletions(-) diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua index 1d348e9..8a0a798 100644 --- a/lua/lazy/async.lua +++ b/lua/lazy/async.lua @@ -9,7 +9,6 @@ local M = {} M._queue = {} M._executor = assert(vim.loop.new_check()) M._running = false -M.SLEEP = "sleep" ---@type Async M.current = nil @@ -62,9 +61,7 @@ function Async:step() self.opts.on_error(tostring(res)) end elseif res then - if res == M.SLEEP then - self.sleeping = true - elseif self.opts.on_yield then + if self.opts.on_yield then self.opts.on_yield(res) end end @@ -130,4 +127,11 @@ function M.wrap(fn, opts) end end +---@async +---@param ms number +function M.sleep(ms) + assert(M.current, "Not in an async context") + M.current:sleep(ms) +end + return M diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index e651f63..a142cf4 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -75,16 +75,8 @@ function Task:status() return msg ~= "" and msg or nil end -function Task:has_started() - return self._started ~= nil -end - -function Task:has_ended() - return self._ended ~= nil -end - function Task:is_running() - return not self:has_ended() + return self._ended == nil end function Task:has_errors() @@ -103,8 +95,8 @@ end ---@private ---@param task LazyTaskFn function Task:_start(task) - assert(not self:has_started(), "task already started") - assert(not self:has_ended(), "task already done") + assert(not self._started, "task already started") + assert(not self._ended, "task already done") if Config.headless() and Config.options.headless.task then self:log("Running task " .. self.name, vim.log.levels.INFO) @@ -171,8 +163,8 @@ end ---@private function Task:_done() - assert(self:has_started(), "task not started") - assert(not self:has_ended(), "task already done") + assert(self._started, "task not started") + assert(not self._ended, "task already done") if self._running and self._running:running() then return @@ -194,10 +186,10 @@ function Task:_done() end function Task:time() - if not self:has_started() then + if not self._started then return 0 end - if not self:has_ended() then + if not self._ended then return (vim.uv.hrtime() - self._started) / 1e6 end return (self._ended - self._started) / 1e6 diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 4a3073e..1c3cee3 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -229,14 +229,6 @@ function M.markdown(msg, opts) ) end ----@async ----@param ms number -function M.sleep(ms) - local async = require("lazy.async").current - assert(async, "Not in an async context") - async:sleep(ms) -end - function M._dump(value, result) local t = type(value) if t == "number" or t == "boolean" then diff --git a/tests/manage/task_spec.lua b/tests/manage/task_spec.lua index adb01e8..7df638a 100644 --- a/tests/manage/task_spec.lua +++ b/tests/manage/task_spec.lua @@ -21,7 +21,6 @@ describe("task", function() it("simple function", function() local task = Task.new(plugin, "test", function() end, opts) - assert(task:has_started()) assert(task:is_running()) task:wait() assert(not task:is_running()) @@ -32,7 +31,6 @@ describe("task", function() local task = Task.new(plugin, "test", function() error("test") end, opts) - assert(task:has_started()) assert(task:is_running()) task:wait() assert(not task:is_running()) @@ -48,7 +46,6 @@ describe("task", function() coroutine.yield() running = false end, opts) - assert(task:has_started()) assert(task:is_running()) assert(running) assert(task:is_running()) @@ -63,7 +60,6 @@ describe("task", function() local task = Task.new(plugin, "spawn_errors", function(task) task:spawn("foobar") end, opts) - assert(task:has_started()) assert(task:is_running()) task:wait() assert(not task:is_running()) @@ -75,9 +71,7 @@ describe("task", function() local task = Task.new(plugin, "test", function(task) task:spawn("echo", { args = { "foo" } }) end, opts) - assert(task:has_started()) assert(task:is_running()) - assert(task:has_started()) assert(task:is_running()) task:wait() assert.same(task:output(), "foo") @@ -90,7 +84,6 @@ describe("task", function() task:spawn("echo", { args = { "foo" } }) task:spawn("echo", { args = { "bar" } }) end, opts) - assert(task:has_started()) assert(task:is_running()) assert(task:is_running()) task:wait() From 60fe75c88db22025989600bb53dba247654d9ed5 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 28 Jun 2024 00:35:38 +0200 Subject: [PATCH 635/815] fix(task): run on_exit async. See #1569 --- lua/lazy/async.lua | 1 + lua/lazy/manage/process.lua | 16 +++++++++++++++- lua/lazy/manage/task/init.lua | 13 +++++++------ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua index 8a0a798..9f39a5c 100644 --- a/lua/lazy/async.lua +++ b/lua/lazy/async.lua @@ -37,6 +37,7 @@ function Async:sleep(ms) vim.defer_fn(function() self.sleeping = false end, ms) + coroutine.yield() end function Async:suspend() diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index 7c568cb..03becf2 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -197,7 +197,21 @@ function M.exec(cmd, opts) lines = _lines end, }) - vim.fn.jobwait({ job }) + + if job <= 0 then + error("Failed to start job: " .. vim.inspect(cmd)) + end + + local Async = require("lazy.async") + local async = Async.current + if async then + while vim.fn.jobwait({ job }, 0)[1] == -1 do + async:sleep(10) + end + else + vim.fn.jobwait({ job }) + end + return lines end diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index a142cf4..989f362 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -217,16 +217,13 @@ function Task:spawn(cmd, opts) self._running:suspend() local running = true - local ret = true + local ret = { ok = true, output = "" } ---@param output string function opts.on_exit(ok, output) if not headless then self:log(vim.trim(output), ok and vim.log.levels.DEBUG or vim.log.levels.ERROR) end - if on_exit then - pcall(on_exit, ok, output) - end - ret = ok + ret = { ok = ok, output = output } running = false self._running:resume() end @@ -241,7 +238,11 @@ function Task:spawn(cmd, opts) Process.spawn(cmd, opts) coroutine.yield() assert(not running, "process still running?") - return ret + if on_exit then + pcall(on_exit, ret.ok, ret.output) + end + coroutine.yield() + return ret.ok end function Task:prefix() From 4319846b8c8a05975c4139b0bc9f7e6e7a9e6e21 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 28 Jun 2024 16:07:49 +0200 Subject: [PATCH 636/815] fix(rocks): lua-5.1. Closes #1575 --- lua/lazy/pkg/rockspec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 2580afa..c89ab3c 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -90,7 +90,7 @@ function M.check(opts) ok = Health.have("luarocks", opts) ok = ( Health.have( - { "lua5.1", "lua" }, + { "lua5.1", "lua", "lua-5.1" }, vim.tbl_extend("force", opts, { version = "-v", version_pattern = "5.1", From a36ebd2a75145cd8a377b1847a7a1ccf31b2ab7a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 28 Jun 2024 16:08:26 +0200 Subject: [PATCH 637/815] refactor: async processes --- lua/lazy/async.lua | 150 +++++++++----- lua/lazy/manage/init.lua | 2 +- lua/lazy/manage/process.lua | 378 ++++++++++++++++++---------------- lua/lazy/manage/runner.lua | 22 +- lua/lazy/manage/task/init.lua | 111 ++++------ lua/lazy/util.lua | 12 +- lua/lazy/view/render.lua | 4 +- lua/lazy/view/sections.lua | 2 +- tests/manage/process_spec.lua | 20 ++ tests/manage/task_spec.lua | 28 +-- tests/run | 2 +- vim.toml | 42 +--- 12 files changed, 394 insertions(+), 379 deletions(-) create mode 100644 tests/manage/process_spec.lua diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua index 9f39a5c..6ad2d6a 100644 --- a/lua/lazy/async.lua +++ b/lua/lazy/async.lua @@ -1,78 +1,122 @@ ----@class AsyncOpts ----@field on_done? fun() ----@field on_error? fun(err:string) ----@field on_yield? fun(res:any) - local M = {} ---@type Async[] M._queue = {} M._executor = assert(vim.loop.new_check()) M._running = false ----@type Async -M.current = nil + +---@type table +M._threads = setmetatable({}, { __mode = "k" }) + +---@alias AsyncEvent "done" | "error" | "yield" | "ok" ---@class Async ----@field co thread ----@field opts AsyncOpts ----@field sleeping? boolean +---@field _co thread +---@field _fn fun() +---@field _suspended? boolean +---@field _on table local Async = {} ---@param fn async fun() ----@param opts? AsyncOpts ---@return Async -function Async.new(fn, opts) +function Async.new(fn) local self = setmetatable({}, { __index = Async }) - self.co = coroutine.create(fn) - self.opts = opts or {} + return self:init(fn) +end + +---@param fn async fun() +---@return Async +function Async:init(fn) + self._fn = fn + self._on = {} + self._co = coroutine.create(function() + local ok, err = pcall(self._fn) + if not ok then + self:_emit("error", err) + end + self:_emit("done") + end) + M._threads[self._co] = self + return M.add(self) +end + +function Async:restart() + assert(not self:running(), "Cannot restart a running async") + self:init(self._fn) +end + +---@param event AsyncEvent +---@param cb async fun(res:any, async:Async) +function Async:on(event, cb) + self._on[event] = self._on[event] or {} + table.insert(self._on[event], cb) return self end -function Async:running() - return coroutine.status(self.co) ~= "dead" +---@private +---@param event AsyncEvent +---@param res any +function Async:_emit(event, res) + for _, cb in ipairs(self._on[event] or {}) do + cb(res, self) + end end +function Async:running() + return coroutine.status(self._co) ~= "dead" +end + +---@async function Async:sleep(ms) - self.sleeping = true + self._suspended = true vim.defer_fn(function() - self.sleeping = false + self._suspended = false end, ms) coroutine.yield() end +---@async function Async:suspend() - self.sleeping = true + self._suspended = true + if coroutine.running() == self._co then + coroutine.yield() + end end function Async:resume() - self.sleeping = false + self._suspended = false +end + +function Async:wait() + local async = M.running() + if coroutine.running() == self._co then + error("Cannot wait on self") + end + + while self:running() do + if async then + coroutine.yield() + else + vim.wait(10) + end + end + return self end function Async:step() - if self.sleeping then + if self._suspended then return true end - local status = coroutine.status(self.co) + local status = coroutine.status(self._co) if status == "suspended" then - M.current = self - local ok, res = coroutine.resume(self.co) - M.current = nil + local ok, res = coroutine.resume(self._co) if not ok then - if self.opts.on_error then - self.opts.on_error(tostring(res)) - end + error(res) elseif res then - if self.opts.on_yield then - self.opts.on_yield(res) - end + self:_emit("yield", res) end end - if self:running() then - return true - end - if self.opts.on_done then - self.opts.on_done() - end + return self:running() end function M.step() @@ -107,32 +151,24 @@ function M.add(async) return async end ----@param fn async fun() ----@param opts? AsyncOpts -function M.run(fn, opts) - return M.add(Async.new(fn, opts)) -end - ----@generic T: async fun() ----@param fn T ----@param opts? AsyncOpts ----@return T -function M.wrap(fn, opts) - return function(...) - local args = { ... } - ---@async - local wrapped = function() - return fn(unpack(args)) - end - return M.run(wrapped, opts) +function M.running() + local co = coroutine.running() + if co then + local async = M._threads[co] + assert(async, "In coroutine without async context") + return async end end ---@async ---@param ms number function M.sleep(ms) - assert(M.current, "Not in an async context") - M.current:sleep(ms) + local async = M.running() + assert(async, "Not in an async context") + async:sleep(ms) end +M.Async = Async +M.new = Async.new + return M diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index 55c5076..ac9ba14 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -236,7 +236,7 @@ function M.clear(plugins) if plugin._.tasks then ---@param task LazyTask plugin._.tasks = vim.tbl_filter(function(task) - return task:is_running() or task:has_errors() + return task:running() or task:has_errors() end, plugin._.tasks) end end diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index 03becf2..f29d978 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -1,67 +1,133 @@ +local Async = require("lazy.async") local Config = require("lazy.core.config") -local M = {} - ----@type table -M.running = {} - -M.signals = { - "HUP", - "INT", - "QUIT", - "ILL", - "TRAP", - "ABRT", - "BUS", - "FPE", - "KILL", - "USR1", - "SEGV", - "USR2", - "PIPE", - "ALRM", - "TERM", - "CHLD", - "CONT", - "STOP", - "TSTP", - "TTIN", - "TTOU", - "URG", - "XCPU", - "XFSZ", - "VTALRM", - "PROF", - "WINCH", - "IO", - "PWR", - "EMT", - "SYS", - "INFO", -} - ---@diagnostic disable-next-line: no-unknown local uv = vim.uv ---@class ProcessOpts ---@field args string[] ---@field cwd? string ----@field on_line? fun(string) +---@field on_line? fun(line:string) ---@field on_exit? fun(ok:boolean, output:string) ----@field on_data? fun(string) +---@field on_data? fun(data:string, is_stderr?:boolean) ---@field timeout? number ---@field env? table ----@param opts? ProcessOpts ----@param cmd string -function M.spawn(cmd, opts) - opts = opts or {} - opts.timeout = opts.timeout or (Config.options.git and Config.options.git.timeout * 1000) +local M = {} +---@type table +M.running = setmetatable({}, { __mode = "k" }) + +---@class LazyProcess: Async +---@field handle? uv_process_t +---@field pid? number +---@field cmd string +---@field opts ProcessOpts +---@field timeout? uv_timer_t +---@field timedout? boolean +---@field data string +---@field check? uv_check_t +---@field code? number +---@field signal? number +local Process = setmetatable({}, { __index = Async.Async }) + +---@param cmd string|string[] +---@param opts? ProcessOpts +function Process.new(cmd, opts) + local self = setmetatable({}, { __index = Process }) + ---@async + Process.init(self, function() + self:_run() + end) + opts = opts or {} + opts.args = opts.args or {} + if type(cmd) == "table" then + self.cmd = table.remove(cmd, 1) + vim.list_extend(opts.args, cmd) + else + self.cmd = cmd + end + opts.timeout = opts.timeout or (Config.options.git and Config.options.git.timeout * 1000) + -- make sure the cwd is valid + if not opts.cwd and type(uv.cwd()) ~= "string" then + opts.cwd = uv.os_homedir() + end + opts.on_line = opts.on_line and vim.schedule_wrap(opts.on_line) or nil + opts.on_data = opts.on_data and vim.schedule_wrap(opts.on_data) or nil + self.data = "" + self.opts = opts + self.code = 1 + self.signal = 0 + return self +end + +---@async +function Process:_run() + self:guard() + local stdout = assert(uv.new_pipe()) + local stderr = assert(uv.new_pipe()) + self.handle = uv.spawn(self.cmd, { + stdio = { nil, stdout, stderr }, + args = self.opts.args, + cwd = self.opts.cwd, + env = self:env(), + }, function(code, signal) + self.code = code + self.signal = signal + if self.timeout then + self.timeout:stop() + end + self.handle:close() + stdout:close() + stderr:close() + self:resume() + end) + + if self.handle then + M.running[self.handle] = self + stdout:read_start(function(err, data) + self:on_data(err, data) + end) + stderr:read_start(function(err, data) + self:on_data(err, data, true) + end) + self:suspend() + while not (self.handle:is_closing() and stdout:is_closing() and stderr:is_closing()) do + coroutine.yield() + end + else + self.data = "Failed to spawn process " .. self.cmd .. " " .. vim.inspect(self.opts) + end + self:on_exit() +end + +function Process:on_exit() + self.data = self.data:gsub("[^\r\n]+\r", "") + if self.timedout then + self.data = self.data .. "\n" .. "Process was killed because it reached the timeout" + elseif self.signal ~= 0 then + self.data = self.data .. "\n" .. "Process was killed with SIG" .. M.signals[self.signal]:upper() + end + if self.opts.on_exit then + self.opts.on_exit(self.code == 0 and self.signal == 0, self.data) + end +end + +function Process:guard() + if self.opts.timeout then + self.timeout = assert(uv.new_timer()) + self.timeout:start(self.opts.timeout, 0, function() + self.timedout = true + self:kill() + end) + end +end + +function Process:env() ---@type table local env = vim.tbl_extend("force", { GIT_SSH_COMMAND = "ssh -oBatchMode=yes", - }, uv.os_environ(), opts.env or {}) + }, uv.os_environ(), self.opts.env or {}) env.GIT_DIR = nil env.GIT_WORK_TREE = nil env.GIT_TERMINAL_PROMPT = "0" @@ -72,147 +138,105 @@ function M.spawn(cmd, opts) for k, v in pairs(env) do env_flat[#env_flat + 1] = k .. "=" .. v end - - local stdout = assert(uv.new_pipe()) - local stderr = assert(uv.new_pipe()) - - local output = "" - ---@type uv_process_t? - local handle = nil - - ---@type uv_timer_t - local timeout - local killed = false - if opts.timeout then - timeout = assert(uv.new_timer()) - timeout:start(opts.timeout, 0, function() - if M.kill(handle) then - killed = true - end - end) - end - - -- make sure the cwd is valid - if not opts.cwd and type(uv.cwd()) ~= "string" then - opts.cwd = uv.os_homedir() - end - - handle = uv.spawn(cmd, { - stdio = { nil, stdout, stderr }, - args = opts.args, - cwd = opts.cwd, - env = env_flat, - }, function(exit_code, signal) - ---@cast handle uv_process_t - M.running[handle] = nil - if timeout then - timeout:stop() - timeout:close() - end - handle:close() - stdout:close() - stderr:close() - local check = assert(uv.new_check()) - check:start(function() - if not stdout:is_closing() or not stderr:is_closing() then - return - end - check:stop() - if opts.on_exit then - output = output:gsub("[^\r\n]+\r", "") - if killed then - output = output .. "\n" .. "Process was killed because it reached the timeout" - elseif signal ~= 0 then - output = output .. "\n" .. "Process was killed with SIG" .. M.signals[signal] - end - - vim.schedule(function() - opts.on_exit(exit_code == 0 and signal == 0, output) - end) - end - end) - end) - - if not handle then - if opts.on_exit then - opts.on_exit(false, "Failed to spawn process " .. cmd .. " " .. vim.inspect(opts)) - end - return - end - M.running[handle] = true - - ---@param data? string - local function on_output(err, data) - assert(not err, err) - - if data then - if opts.on_data then - vim.schedule(function() - opts.on_data(data) - end) - end - output = output .. data:gsub("\r\n", "\n") - local lines = vim.split(vim.trim(output:gsub("\r$", "")):gsub("[^\n\r]+\r", ""), "\n") - - if opts.on_line then - vim.schedule(function() - opts.on_line(lines[#lines]) - end) - end - end - end - - uv.read_start(stdout, on_output) - uv.read_start(stderr, on_output) - - return handle + return env_flat end -function M.kill(handle) - if handle and not handle:is_closing() then - M.running[handle] = nil - uv.process_kill(handle, "sigint") - return true +---@param signals uv.aliases.signals|uv.aliases.signals[]|nil +function Process:kill(signals) + if not self.handle or self.handle:is_closing() then + return end + signals = signals or { "sigterm", "sigkill" } + signals = type(signals) == "table" and signals or { signals } + ---@cast signals uv.aliases.signals[] + local timer = assert(uv.new_timer()) + timer:start(0, 1000, function() + if self.handle and not self.handle:is_closing() and #signals > 0 then + self.handle:kill(table.remove(signals, 1)) + else + timer:stop() + end + end) +end + +---@param err? string +---@param data? string +---@param is_stderr? boolean +function Process:on_data(err, data, is_stderr) + assert(not err, err) + if not data then + return + end + + if self.opts.on_data then + self.opts.on_data(data, is_stderr) + end + self.data = self.data .. data:gsub("\r\n", "\n") + local lines = vim.split(vim.trim(self.data:gsub("\r$", "")):gsub("[^\n\r]+\r", ""), "\n") + + if self.opts.on_line then + self.opts.on_line(lines[#lines]) + end +end + +M.signals = { + "hup", + "int", + "quit", + "ill", + "trap", + "abrt", + "bus", + "fpe", + "kill", + "usr1", + "segv", + "usr2", + "pipe", + "alrm", + "term", + "chld", + "cont", + "stop", + "tstp", + "ttin", + "ttou", + "urg", + "xcpu", + "xfsz", + "vtalrm", + "prof", + "winch", + "io", + "pwr", + "emt", + "sys", + "info", +} + +---@param cmd string|string[] +---@param opts? ProcessOpts +function M.spawn(cmd, opts) + return Process.new(cmd, opts) end function M.abort() - for handle in pairs(M.running) do - M.kill(handle) + for _, proc in pairs(M.running) do + proc:kill() end end ----@param cmd string[] ----@param opts? {cwd:string, env:table} +---@async +---@param cmd string|string[] +---@param opts? ProcessOpts function M.exec(cmd, opts) opts = opts or {} - ---@type string[] - local lines - local job = vim.fn.jobstart(cmd, { - cwd = opts.cwd, - pty = false, - env = opts.env, - stdout_buffered = true, - on_stdout = function(_, _lines) - lines = _lines - end, - }) - - if job <= 0 then - error("Failed to start job: " .. vim.inspect(cmd)) + local proc = M.spawn(cmd, opts) + proc:wait() + if proc.code ~= 0 then + error("Process failed with code " .. proc.code) end - - local Async = require("lazy.async") - local async = Async.current - if async then - while vim.fn.jobwait({ job }, 0)[1] == -1 do - async:sleep(10) - end - else - vim.fn.jobwait({ job }) - end - - return lines + return vim.split(proc.data, "\n") end return M diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index 74d6254..c5f5c75 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -16,7 +16,6 @@ local Task = require("lazy.manage.task") ---@class Runner ---@field _plugins table ---@field _pipeline PipelineStep[] ----@field _on_done fun()[] ---@field _opts RunnerOpts ---@field _running? Async local Runner = {} @@ -38,7 +37,6 @@ function Runner.new(opts) for _, plugin in ipairs(pp) do self._plugins[plugin.name] = plugin end - self._on_done = {} ---@param step string|(TaskOptions|{[1]:string}) self._pipeline = vim.tbl_map(function(step) @@ -61,15 +59,9 @@ end function Runner:start() ---@async - self._running = Async.run(function() + self._running = Async.new(function() self:_start() - end, { - on_done = function() - for _, cb in ipairs(self._on_done) do - cb() - end - end, - }) + end) end ---@async @@ -97,7 +89,7 @@ function Runner:_start() for _, name in ipairs(names) do state[name] = state[name] or { step = 0 } local s = state[name] - local is_running = s.task and s.task:is_running() + local is_running = s.task and s.task:running() local step = self._pipeline[s.step] if is_running then @@ -185,14 +177,10 @@ function Runner:wait(cb) end return self end - if cb then - table.insert(self._on_done, cb) + self._running:on("done", cb) else - -- sync wait - while self:is_running() do - vim.wait(10) - end + self._running:wait() end return self end diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 989f362..1470379 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -15,16 +15,15 @@ local colors = Config.options.headless.colors ---@field msg string ---@field level? number ----@class LazyTask +---@class LazyTask: Async ---@field plugin LazyPlugin ---@field name string ---@field private _log LazyMsg[] ----@field private _started? number +---@field private _started number ---@field private _ended? number ---@field private _opts TaskOptions ----@field private _running Async ---@field private _level number -local Task = {} +local Task = setmetatable({}, { __index = Async.Async }) ---@class TaskOptions: {[string]:any} ---@field on_done? fun(task:LazyTask) @@ -35,17 +34,21 @@ local Task = {} ---@param task LazyTaskFn function Task.new(plugin, name, task, opts) local self = setmetatable({}, { __index = Task }) + ---@async + Task.init(self, function() + self:_run(task) + end) + self:set_level() self._opts = opts or {} self._log = {} - self:set_level() self.plugin = plugin self.name = name + self._started = vim.uv.hrtime() ---@param other LazyTask plugin._.tasks = vim.tbl_filter(function(other) - return other.name ~= name or other:is_running() + return other.name ~= name or other:running() end, plugin._.tasks or {}) table.insert(plugin._.tasks, self) - self:_start(task) return self end @@ -75,10 +78,6 @@ function Task:status() return msg ~= "" and msg or nil end -function Task:is_running() - return self._ended == nil -end - function Task:has_errors() return self._level >= vim.log.levels.ERROR end @@ -92,31 +91,24 @@ function Task:set_level(level) self._level = level or vim.log.levels.TRACE end ----@private +---@async ---@param task LazyTaskFn -function Task:_start(task) - assert(not self._started, "task already started") - assert(not self._ended, "task already done") - +function Task:_run(task) if Config.headless() and Config.options.headless.task then self:log("Running task " .. self.name, vim.log.levels.INFO) end - self._started = vim.uv.hrtime() - ---@async - self._running = Async.run(function() - task(self, self._opts) - end, { - on_done = function() + self + :on("done", function() self:_done() - end, - on_error = function(err) + end) + :on("error", function(err) self:error(err) - end, - on_yield = function(res) - self:log(res) - end, - }) + end) + :on("yield", function(msg) + self:log(msg) + end) + task(self, self._opts) end ---@param msg string|string[] @@ -163,13 +155,6 @@ end ---@private function Task:_done() - assert(self._started, "task not started") - assert(not self._ended, "task already done") - - if self._running and self._running:running() then - return - end - if Config.headless() and Config.options.headless.task then local ms = math.floor(self:time() + 0.5) self:log("Finished task " .. self.name .. " in " .. ms .. "ms", vim.log.levels.INFO) @@ -186,13 +171,7 @@ function Task:_done() end function Task:time() - if not self._started then - return 0 - end - if not self._ended then - return (vim.uv.hrtime() - self._started) / 1e6 - end - return (self._ended - self._started) / 1e6 + return ((self._ended or vim.uv.hrtime()) - self._started) / 1e6 end ---@async @@ -201,7 +180,6 @@ end function Task:spawn(cmd, opts) opts = opts or {} local on_line = opts.on_line - local on_exit = opts.on_exit local headless = Config.headless() and Config.options.headless.process @@ -214,35 +192,28 @@ function Task:spawn(cmd, opts) end end - self._running:suspend() - - local running = true - local ret = { ok = true, output = "" } - ---@param output string - function opts.on_exit(ok, output) - if not headless then - self:log(vim.trim(output), ok and vim.log.levels.DEBUG or vim.log.levels.ERROR) - end - ret = { ok = ok, output = output } - running = false - self._running:resume() - end - if headless then opts.on_data = function(data) -- prefix with plugin name - local prefix = self:prefix() - io.write(Terminal.prefix(data, prefix)) + io.write(Terminal.prefix(data, self:prefix())) end end - Process.spawn(cmd, opts) - coroutine.yield() - assert(not running, "process still running?") - if on_exit then - pcall(on_exit, ret.ok, ret.output) + + local proc = Process.spawn(cmd, opts) + proc:wait() + + local ok = proc.code == 0 and proc.signal == 0 + if not headless then + local msg = vim.trim(proc.data) + if #msg > 0 then + self:log(vim.trim(proc.data), ok and vim.log.levels.DEBUG or vim.log.levels.ERROR) + end end - coroutine.yield() - return ret.ok + + if opts.on_exit then + pcall(opts.on_exit, ok, proc.data) + end + return ok end function Task:prefix() @@ -253,10 +224,4 @@ function Task:prefix() or plugin .. " " .. task .. " | " end -function Task:wait() - while self:is_running() do - vim.wait(10) - end -end - return Task diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 1c3cee3..9f1088d 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -76,6 +76,13 @@ function M.throttle(ms, fn) local timer = vim.uv.new_timer() local pending = false + ---@type Async + local async + + local function running() + return async and async:running() + end + return function() if timer:is_active() then pending = true @@ -85,7 +92,10 @@ function M.throttle(ms, fn) 0, ms, vim.schedule_wrap(function() - fn() + if running() then + return + end + async = require("lazy.async").new(fn) if pending then pending = false else diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 6d0e758..640e9b0 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -51,7 +51,7 @@ function M:update() if plugin._.tasks then for _, task in ipairs(plugin._.tasks) do self.progress.total = self.progress.total + 1 - if not task:is_running() then + if not task:running() then self.progress.done = self.progress.done + 1 end end @@ -356,7 +356,7 @@ end function M:diagnostics(plugin) local skip = false for _, task in ipairs(plugin._.tasks or {}) do - if task:is_running() then + if task:running() then self:diagnostic({ severity = vim.diagnostic.severity.WARN, message = task.name .. (task:status() and (": " .. task:status()) or ""), diff --git a/lua/lazy/view/sections.lua b/lua/lazy/view/sections.lua index c9fd9a7..c1681a8 100644 --- a/lua/lazy/view/sections.lua +++ b/lua/lazy/view/sections.lua @@ -28,7 +28,7 @@ return { return true end return has_task(plugin, function(task) - return task:is_running() + return task:running() end) end, title = "Working", diff --git a/tests/manage/process_spec.lua b/tests/manage/process_spec.lua new file mode 100644 index 0000000..0fbbe89 --- /dev/null +++ b/tests/manage/process_spec.lua @@ -0,0 +1,20 @@ +---@module 'luassert' +local Async = require("lazy.async") +local Process = require("lazy.manage.process") + +describe("process", function() + it("runs sync", function() + local lines = Process.exec({ "echo", "-n", "hello" }) + assert.are.same({ "hello" }, lines) + end) + + it("runs sync from async context", function() + local lines ---@type string[] + local async = Async.new(function() + lines = Process.exec({ "echo", "-n", "hello" }) + end) + async:wait() + + assert.are.same({ "hello" }, lines) + end) +end) diff --git a/tests/manage/task_spec.lua b/tests/manage/task_spec.lua index 7df638a..e161fa2 100644 --- a/tests/manage/task_spec.lua +++ b/tests/manage/task_spec.lua @@ -21,9 +21,9 @@ describe("task", function() it("simple function", function() local task = Task.new(plugin, "test", function() end, opts) - assert(task:is_running()) + assert(task:running()) task:wait() - assert(not task:is_running()) + assert(not task:running()) assert(task_result.done) end) @@ -31,9 +31,9 @@ describe("task", function() local task = Task.new(plugin, "test", function() error("test") end, opts) - assert(task:is_running()) + assert(task:running()) task:wait() - assert(not task:is_running()) + assert(not task:running()) assert(task_result.done) assert(task_result.error) assert(task:has_errors() and task:output(vim.log.levels.ERROR):find("test")) @@ -46,12 +46,12 @@ describe("task", function() coroutine.yield() running = false end, opts) - assert(task:is_running()) + assert(task:running()) assert(running) - assert(task:is_running()) + assert(task:running()) task:wait() assert(not running) - assert(not task:is_running()) + assert(not task:running()) assert(task_result.done) assert(not task:has_errors()) end) @@ -60,19 +60,19 @@ describe("task", function() local task = Task.new(plugin, "spawn_errors", function(task) task:spawn("foobar") end, opts) - assert(task:is_running()) + assert(task:running()) task:wait() - assert(not task:is_running()) + assert(not task:running()) assert(task_result.done) - assert(task:has_errors() and task:output(vim.log.levels.ERROR):find("Failed to spawn"), task.output) + assert(task:has_errors() and task:output(vim.log.levels.ERROR):find("Failed to spawn"), task:output()) end) it("spawn", function() local task = Task.new(plugin, "test", function(task) task:spawn("echo", { args = { "foo" } }) end, opts) - assert(task:is_running()) - assert(task:is_running()) + assert(task:running()) + assert(task:running()) task:wait() assert.same(task:output(), "foo") assert(task_result.done) @@ -84,8 +84,8 @@ describe("task", function() task:spawn("echo", { args = { "foo" } }) task:spawn("echo", { args = { "bar" } }) end, opts) - assert(task:is_running()) - assert(task:is_running()) + assert(task:running()) + assert(task:running()) task:wait() assert(task:output() == "foo\nbar" or task:output() == "bar\nfoo", task:output()) assert(task_result.done) diff --git a/tests/run b/tests/run index 7c8bb34..7872f5a 100755 --- a/tests/run +++ b/tests/run @@ -1,3 +1,3 @@ #!/bin/sh -nvim -l tests/busted.lua tests -o utfTerminal +nvim -l tests/busted.lua tests -o utfTerminal "$@" diff --git a/vim.toml b/vim.toml index 4206f6c..df7e67e 100644 --- a/vim.toml +++ b/vim.toml @@ -8,42 +8,14 @@ any = true [jit] any = true -[[describe.args]] -type = "string" -[[describe.args]] -type = "function" - -[[it.args]] -type = "string" -[[it.args]] -type = "function" - -[[before_each.args]] -type = "function" -[[after_each.args]] -type = "function" - -[assert.is_not] +[assert] any = true -[[assert.equals.args]] -type = "any" -[[assert.equals.args]] -type = "any" -[[assert.equals.args]] -type = "any" -required = false +[describe] +any = true -[[assert.same.args]] -type = "any" -[[assert.same.args]] -type = "any" +[it] +any = true -[[assert.truthy.args]] -type = "any" - -[[assert.spy.args]] -type = "any" - -[[assert.stub.args]] -type = "any" +[before_each.args] +any = true From ab46edbd47fa9f380db65dbf0a7c35d18d810b19 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 28 Jun 2024 17:44:21 +0200 Subject: [PATCH 638/815] perf: async render --- lua/lazy/manage/task/init.lua | 21 +++++++++++++++------ lua/lazy/util.lua | 34 +++++++++++----------------------- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 1470379..2b21001 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -49,6 +49,7 @@ function Task.new(plugin, name, task, opts) return other.name ~= name or other:running() end, plugin._.tasks or {}) table.insert(plugin._.tasks, self) + self:render() return self end @@ -119,12 +120,18 @@ function Task:log(msg, level) msg = type(msg) == "table" and table.concat(msg, "\n") or msg ---@cast msg string table.insert(self._log, { msg = msg, level = level }) - vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) + self:render() if Config.headless() then self:headless() end end +function Task:render() + vim.schedule(function() + vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) + end) +end + function Task:headless() if not Config.options.headless.log then return @@ -163,11 +170,13 @@ function Task:_done() if self._opts.on_done then self._opts.on_done(self) end - vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false }) - vim.api.nvim_exec_autocmds("User", { - pattern = "LazyPlugin" .. self.name:sub(1, 1):upper() .. self.name:sub(2), - data = { plugin = self.plugin.name }, - }) + vim.schedule(function() + self:render() + vim.api.nvim_exec_autocmds("User", { + pattern = "LazyPlugin" .. self.name:sub(1, 1):upper() .. self.name:sub(2), + data = { plugin = self.plugin.name }, + }) + end) end function Task:time() diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index 9f1088d..d1ae7fd 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -73,36 +73,24 @@ end ---@param fn F ---@return F function M.throttle(ms, fn) - local timer = vim.uv.new_timer() - local pending = false - ---@type Async local async - - local function running() - return async and async:running() - end + local pending = false return function() - if timer:is_active() then + if async and async:running() then pending = true return end - timer:start( - 0, - ms, - vim.schedule_wrap(function() - if running() then - return - end - async = require("lazy.async").new(fn) - if pending then - pending = false - else - timer:stop() - end - end) - ) + ---@async + async = require("lazy.async").new(function() + repeat + pending = false + fn() + async:sleep(ms) + + until not pending + end) end end From f85575ab23c81eb897fb2cb1240a0fa1cb41f7f4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 28 Jun 2024 17:44:43 +0200 Subject: [PATCH 639/815] perf: use timer instead of check for async executor --- lua/lazy/async.lua | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua index 6ad2d6a..356f4b1 100644 --- a/lua/lazy/async.lua +++ b/lua/lazy/async.lua @@ -2,8 +2,10 @@ local M = {} ---@type Async[] M._queue = {} -M._executor = assert(vim.loop.new_check()) -M._running = false +M._executor = assert(vim.loop.new_timer()) + +M.TIMER = 10 +M.BUDGET = 100 ---@type table M._threads = setmetatable({}, { __mode = "k" }) @@ -68,11 +70,10 @@ end ---@async function Async:sleep(ms) - self._suspended = true vim.defer_fn(function() - self._suspended = false + self:resume() end, ms) - coroutine.yield() + self:suspend() end ---@async @@ -120,12 +121,11 @@ function Async:step() end function M.step() - M._running = true - local budget = 1 * 1e6 - local start = vim.loop.hrtime() + local budget = M.BUDGET * 1e6 + local start = vim.uv.hrtime() local count = #M._queue local i = 0 - while #M._queue > 0 and vim.loop.hrtime() - start < budget do + while #M._queue > 0 and vim.uv.hrtime() - start < budget do ---@type Async local state = table.remove(M._queue, 1) if state:step() then @@ -136,7 +136,6 @@ function M.step() break end end - M._running = false if #M._queue == 0 then return M._executor:stop() end @@ -146,7 +145,7 @@ end function M.add(async) table.insert(M._queue, async) if not M._executor:is_active() then - M._executor:start(vim.schedule_wrap(M.step)) + M._executor:start(1, M.TIMER, vim.schedule_wrap(M.step)) end return async end From a617d9f47b05b80cce595cce0966b88332c75b49 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 28 Jun 2024 17:47:04 +0200 Subject: [PATCH 640/815] chore(main): release 11.5.1 (#1573) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 14 ++++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 1d395f3..063a909 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.5.0" + ".": "11.5.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c9fdb0..b939887 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [11.5.1](https://github.com/folke/lazy.nvim/compare/v11.5.0...v11.5.1) (2024-06-28) + + +### Bug Fixes + +* **rocks:** lua-5.1. Closes [#1575](https://github.com/folke/lazy.nvim/issues/1575) ([4319846](https://github.com/folke/lazy.nvim/commit/4319846b8c8a05975c4139b0bc9f7e6e7a9e6e21)) +* **task:** run on_exit async. See [#1569](https://github.com/folke/lazy.nvim/issues/1569) ([60fe75c](https://github.com/folke/lazy.nvim/commit/60fe75c88db22025989600bb53dba247654d9ed5)) + + +### Performance Improvements + +* async render ([ab46edb](https://github.com/folke/lazy.nvim/commit/ab46edbd47fa9f380db65dbf0a7c35d18d810b19)) +* use timer instead of check for async executor ([f85575a](https://github.com/folke/lazy.nvim/commit/f85575ab23c81eb897fb2cb1240a0fa1cb41f7f4)) + ## [11.5.0](https://github.com/folke/lazy.nvim/compare/v11.4.2...v11.5.0) (2024-06-27) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 501f579..c087527 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -218,7 +218,7 @@ M.defaults = { debug = false, } -M.version = "11.5.0" -- x-release-please-version +M.version = "11.5.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 2a6a2dce1b14f35e7eb7cbe8f25202ed83cba697 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 28 Jun 2024 18:31:10 +0200 Subject: [PATCH 641/815] fix(git): tagrefs --- lua/lazy/manage/git.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lua/lazy/manage/git.lua b/lua/lazy/manage/git.lua index 6b0ab58..a365824 100644 --- a/lua/lazy/manage/git.lua +++ b/lua/lazy/manage/git.lua @@ -184,7 +184,12 @@ function M.get_tag_refs(repo, tagref) tagref = tagref or "--tags" ---@type table local tags = {} - local lines = Process.exec({ "git", "show-ref", "-d", tagref }, { cwd = repo }) + local ok, lines = pcall(function() + return Process.exec({ "git", "show-ref", "-d", tagref }, { cwd = repo }) + end) + if not ok then + return {} + end for _, line in ipairs(lines) do local ref, tag = line:match("^(%w+) refs/tags/([^%^]+)%^?{?}?$") if ref then From ec95702ae617308df35f35ad93c469c86d47346f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 28 Jun 2024 18:33:22 +0200 Subject: [PATCH 642/815] chore(main): release 11.5.2 (#1577) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 063a909..d7f1664 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.5.1" + ".": "11.5.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index b939887..5d30b82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.5.2](https://github.com/folke/lazy.nvim/compare/v11.5.1...v11.5.2) (2024-06-28) + + +### Bug Fixes + +* **git:** tagrefs ([2a6a2dc](https://github.com/folke/lazy.nvim/commit/2a6a2dce1b14f35e7eb7cbe8f25202ed83cba697)) + ## [11.5.1](https://github.com/folke/lazy.nvim/compare/v11.5.0...v11.5.1) (2024-06-28) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index c087527..2a66a57 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -218,7 +218,7 @@ M.defaults = { debug = false, } -M.version = "11.5.1" -- x-release-please-version +M.version = "11.5.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 9cf745939d792204a18d7ad10a54d22386ececf3 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 28 Jun 2024 20:17:34 +0200 Subject: [PATCH 643/815] feat(task): build procs can now yield a LazyMsg for more control --- lua/lazy/manage/task/init.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lua/lazy/manage/task/init.lua b/lua/lazy/manage/task/init.lua index 2b21001..277a592 100644 --- a/lua/lazy/manage/task/init.lua +++ b/lua/lazy/manage/task/init.lua @@ -112,9 +112,13 @@ function Task:_run(task) task(self, self._opts) end ----@param msg string|string[] +---@param msg string|string[]|LazyMsg ---@param level? number function Task:log(msg, level) + if type(msg) == "table" and msg.msg then + level = msg.level or level + msg = msg.msg + end level = level or vim.log.levels.DEBUG self._level = math.max(self._level or 0, level or 0) msg = type(msg) == "table" and table.concat(msg, "\n") or msg @@ -170,8 +174,8 @@ function Task:_done() if self._opts.on_done then self._opts.on_done(self) end + self:render() vim.schedule(function() - self:render() vim.api.nvim_exec_autocmds("User", { pattern = "LazyPlugin" .. self.name:sub(1, 1):upper() .. self.name:sub(2), data = { plugin = self.plugin.name }, From a1fffe18f9355030fbb483156c762f50f5e0db73 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 28 Jun 2024 18:22:55 +0000 Subject: [PATCH 644/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index e88747b..65fbe06 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1226,7 +1226,7 @@ BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* loaded. Lua plugins/libraries are automatically loaded when they are `require()`d, so they don’t need to be in `dependencies`. - Inside a `build` function or `*.lua` build file, use - `coroutine.yield(status_msg)` to show progress. + `coroutine.yield(msg:string|LazyMsg)` to show progress. - Don’t change the `cwd` in your build function, since builds run in parallel and changing the `cwd` will affect other builds. @@ -1245,9 +1245,19 @@ The spec **build** property can be one of the following: - if no `build` is specified, but a `build.lua` file exists, that will be used instead. Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(status_msg)` to show progress. Yielding will also schedule the -next `coroutine.resume()` to run in the next tick, so you can do long-running -tasks without blocking Neovim. +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. ============================================================================== From ba1a9c5392915c306cb12ed0b64b9b3e6372a1d5 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 07:12:16 +0200 Subject: [PATCH 645/815] ci: bootstrap script --- bootstrap.lua | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 bootstrap.lua diff --git a/bootstrap.lua b/bootstrap.lua new file mode 100644 index 0000000..3b30f1f --- /dev/null +++ b/bootstrap.lua @@ -0,0 +1,48 @@ +-- Lay Bootstrapper +-- Usage: +-- ```lua +-- load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +-- ``` +local M = {} + +function M.setup() + if vim.env.LAZY_STDPATH then + local root = vim.fn.fnamemodify(vim.env.LAZY_STDPATH, ":p") + for _, name in ipairs({ "config", "data", "state", "cache" }) do + vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name + end + end + + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + vim.api.nvim_echo({ + { + "Cloning lazy.nvim\n\n", + "DiagnosticInfo", + }, + }, true, {}) + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local ok, out = + pcall(vim.fn.system, { "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if not ok or vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { + "Failed to clone lazy.nvim\n", + "ErrorMsg", + }, + { + vim.trim(out or ""), + "WarningMsg", + }, + { "\nPress any key to exit", "MoreMsg" }, + }, true, {}) + + vim.fn.getchar() + vim.cmd([[quit]]) + end + end + vim.opt.rtp:prepend(lazypath) +end +M.setup() + +return M From c93eb359a39bc924578a08ac6dacca4b82f97c97 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 07:15:22 +0200 Subject: [PATCH 646/815] ci: minit (minimal init) --- lua/lazy/minit.lua | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 lua/lazy/minit.lua diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua new file mode 100644 index 0000000..01ac238 --- /dev/null +++ b/lua/lazy/minit.lua @@ -0,0 +1,57 @@ +---@diagnostic disable: inject-field +---@class LazyMinit:LazyConfig +---@field stdpath? string + +local islist = vim.islist or vim.tbl_islist + +---@alias MinitSetup (fun(spec:LazySpec, opts: LazyMinit):LazyMinit?) | (fun(opts: LazyMinit):LazyMinit?) | (fun(spec:LazySpec, opts: LazyMinit):LazyMinit?) + +local M = {} + +---@param opts LazyMinit +---@return LazySpec[] +local function get_spec(opts) + local ret = opts.spec or {} + return ret and type(ret) == "table" and islist(ret) and ret or { ret } +end + +---@param defaults LazyMinit +---@param opts LazyMinit +function M.extend(defaults, opts) + local spec = {} + vim.list_extend(spec, get_spec(defaults)) + vim.list_extend(spec, get_spec(opts)) + return vim.tbl_deep_extend("force", defaults, opts, { spec = spec }) +end + +function M.setup(opts) + opts = M.extend({ spec = { { dir = vim.fn.expand(".") } } }, opts) + + -- set stdpaths to use .tests + local root = opts.stdpath or ".minit" + root = vim.fn.fnamemodify(root, ":p") + for _, name in ipairs({ "config", "data", "state", "cache" }) do + vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name + end + + vim.o.loadplugins = true + require("lazy").setup(opts) +end + +---@param opts LazyMinit +function M.busted(opts) + opts = M.extend({ spec = { "lunarmodules/busted" }, rocks = { hererocks = true } }, opts) + + M.setup(opts) + + local Config = require("lazy.core.config") + -- disable termnial output for the tests + Config.options.headless = {} + + -- run busted + return pcall(require("busted.runner"), { + standalone = false, + }) or os.exit(1) +end + +return M From cfdfb786b13ca0e37562a0f68b0930869c75af7f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 07:17:01 +0200 Subject: [PATCH 647/815] chore(main): release 11.6.0 (#1579) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index d7f1664..888664e 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.5.2" + ".": "11.6.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d30b82..f310801 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.6.0](https://github.com/folke/lazy.nvim/compare/v11.5.2...v11.6.0) (2024-06-29) + + +### Features + +* **task:** build procs can now yield a LazyMsg for more control ([9cf7459](https://github.com/folke/lazy.nvim/commit/9cf745939d792204a18d7ad10a54d22386ececf3)) + ## [11.5.2](https://github.com/folke/lazy.nvim/compare/v11.5.1...v11.5.2) (2024-06-28) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 2a66a57..0ff2ca6 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -218,7 +218,7 @@ M.defaults = { debug = false, } -M.version = "11.5.2" -- x-release-please-version +M.version = "11.6.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From f47ab692f1bc84116d3c95808bba2e2b86fbd450 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 07:26:39 +0200 Subject: [PATCH 648/815] ci: allow to run busted script with nvim -u to inspect env --- lua/lazy/minit.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua index 01ac238..52a0059 100644 --- a/lua/lazy/minit.lua +++ b/lua/lazy/minit.lua @@ -48,6 +48,9 @@ function M.busted(opts) -- disable termnial output for the tests Config.options.headless = {} + if not require("lazy.core.config").headless() then + return vim.notify("busted can only run in headless mode. Please run with `nvim -l`", vim.log.levels.WARN) + end -- run busted return pcall(require("busted.runner"), { standalone = false, From b1821ca2fa193526246057f1659ee631be3912f7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 07:26:49 +0200 Subject: [PATCH 649/815] ci: tests using minit --- tests/busted.lua | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/tests/busted.lua b/tests/busted.lua index 8fd4f28..0bc764b 100755 --- a/tests/busted.lua +++ b/tests/busted.lua @@ -1,28 +1,9 @@ #!/usr/bin/env -S nvim -l --- set stdpaths to use .tests -local root = vim.fn.fnamemodify("./.tests", ":p") -for _, name in ipairs({ "config", "data", "state", "cache" }) do - vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name -end - vim.opt.rtp:prepend(".") -vim.o.loadplugins = true -- enable since nvim -l disables plugins - -- Setup lazy.nvim -require("lazy").setup({ - spec = { - "lunarmodules/busted", -- add busted - }, - rocks = { hererocks = true }, +require("lazy.minit").busted({ + spec = {}, + stdpath = ".tests", }) - -local Config = require("lazy.core.config") --- disable termnial output for the tests -Config.options.headless = {} - --- run busted -return pcall(require("busted.runner"), { - standalone = false, -}) or os.exit(1) From 0e106c085c7b7bb6553fcd770b7d059e69a62c90 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 07:46:41 +0200 Subject: [PATCH 650/815] ci(minit): added repro --- lua/lazy/minit.lua | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua index 52a0059..d4e03d5 100644 --- a/lua/lazy/minit.lua +++ b/lua/lazy/minit.lua @@ -25,7 +25,9 @@ function M.extend(defaults, opts) end function M.setup(opts) - opts = M.extend({ spec = { { dir = vim.fn.expand(".") } } }, opts) + opts = M.extend({ + change_detection = { enabled = false }, + }, opts) -- set stdpaths to use .tests local root = opts.stdpath or ".minit" @@ -36,11 +38,45 @@ function M.setup(opts) vim.o.loadplugins = true require("lazy").setup(opts) + require("lazy").update():wait() + if vim.bo.filetype == "lazy" then + local errors = false + for _, plugin in pairs(require("lazy.core.config").spec.plugins) do + errors = errors or require("lazy.core.plugin").has_errors(plugin) + end + if not errors then + vim.cmd.close() + end + end +end + +function M.repro(opts) + opts = M.extend({ + spec = { + { + "folke/tokyonight.nvim", + priority = 1000, + lazy = false, + config = function() + require("tokyonight").setup({ style = "moon" }) + require("tokyonight").load() + end, + }, + }, + install = { colorscheme = { "tokyonight" } }, + }, opts) + M.setup(opts) end ---@param opts LazyMinit function M.busted(opts) - opts = M.extend({ spec = { "lunarmodules/busted" }, rocks = { hererocks = true } }, opts) + opts = M.extend({ + spec = { + "lunarmodules/busted", + { dir = vim.fn.fnamemodify(".", ":p") }, + }, + rocks = { hererocks = true }, + }, opts) M.setup(opts) From cdfea60506121d4704f37b8018fb24a135fb2f54 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 08:03:06 +0200 Subject: [PATCH 651/815] build(bootstrap): added support for custom lazypath --- bootstrap.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bootstrap.lua b/bootstrap.lua index 3b30f1f..e39db4d 100644 --- a/bootstrap.lua +++ b/bootstrap.lua @@ -13,8 +13,8 @@ function M.setup() end end - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazypath = vim.env.LAZY_PATH or vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not vim.env.LAZY_PATH and not (vim.uv or vim.loop).fs_stat(lazypath) then vim.api.nvim_echo({ { "Cloning lazy.nvim\n\n", From 307868826360bc1bda7502b002a4b6049d82ebaa Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 08:03:37 +0200 Subject: [PATCH 652/815] ci(minit): LAZY_STDPATH --- lua/lazy/minit.lua | 21 +++++++++------------ tests/busted.lua | 2 ++ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua index d4e03d5..01f89c0 100644 --- a/lua/lazy/minit.lua +++ b/lua/lazy/minit.lua @@ -1,22 +1,18 @@ ---@diagnostic disable: inject-field ----@class LazyMinit:LazyConfig ----@field stdpath? string local islist = vim.islist or vim.tbl_islist ----@alias MinitSetup (fun(spec:LazySpec, opts: LazyMinit):LazyMinit?) | (fun(opts: LazyMinit):LazyMinit?) | (fun(spec:LazySpec, opts: LazyMinit):LazyMinit?) - local M = {} ----@param opts LazyMinit +---@param opts LazyConfig ---@return LazySpec[] local function get_spec(opts) local ret = opts.spec or {} return ret and type(ret) == "table" and islist(ret) and ret or { ret } end ----@param defaults LazyMinit ----@param opts LazyMinit +---@param defaults LazyConfig +---@param opts LazyConfig function M.extend(defaults, opts) local spec = {} vim.list_extend(spec, get_spec(defaults)) @@ -30,10 +26,11 @@ function M.setup(opts) }, opts) -- set stdpaths to use .tests - local root = opts.stdpath or ".minit" - root = vim.fn.fnamemodify(root, ":p") - for _, name in ipairs({ "config", "data", "state", "cache" }) do - vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name + if vim.env.LAZY_STDPATH then + local root = vim.fn.fnamemodify(vim.env.LAZY_STDPATH, ":p") + for _, name in ipairs({ "config", "data", "state", "cache" }) do + vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name + end end vim.o.loadplugins = true @@ -68,7 +65,7 @@ function M.repro(opts) M.setup(opts) end ----@param opts LazyMinit +---@param opts LazyConfig function M.busted(opts) opts = M.extend({ spec = { diff --git a/tests/busted.lua b/tests/busted.lua index 0bc764b..7292d3e 100755 --- a/tests/busted.lua +++ b/tests/busted.lua @@ -1,5 +1,7 @@ #!/usr/bin/env -S nvim -l +vim.env.LAZY_STDPATH = ".tests" + vim.opt.rtp:prepend(".") -- Setup lazy.nvim From 88f4d13e5f489eb30959db03a94ebfa10a78b47f Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 08:11:42 +0200 Subject: [PATCH 653/815] feat(minit): fallback to habamax when no colorscheme set --- lua/lazy/minit.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua index 01f89c0..7da2b2a 100644 --- a/lua/lazy/minit.lua +++ b/lua/lazy/minit.lua @@ -35,6 +35,9 @@ function M.setup(opts) vim.o.loadplugins = true require("lazy").setup(opts) + if vim.g.colors_name == nil then + vim.cmd("colorscheme habamax") + end require("lazy").update():wait() if vim.bo.filetype == "lazy" then local errors = false From cece2a9b4a649ee5fa45fe83590a6dd11c5d4eb7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 08:13:24 +0200 Subject: [PATCH 654/815] chore(main): release 11.7.0 (#1582) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 888664e..2f14177 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.6.0" + ".": "11.7.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index f310801..0fd257c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.7.0](https://github.com/folke/lazy.nvim/compare/v11.6.0...v11.7.0) (2024-06-29) + + +### Features + +* **minit:** fallback to habamax when no colorscheme set ([88f4d13](https://github.com/folke/lazy.nvim/commit/88f4d13e5f489eb30959db03a94ebfa10a78b47f)) + ## [11.6.0](https://github.com/folke/lazy.nvim/compare/v11.5.2...v11.6.0) (2024-06-29) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 0ff2ca6..4d6bca7 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -218,7 +218,7 @@ M.defaults = { debug = false, } -M.version = "11.6.0" -- x-release-please-version +M.version = "11.7.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 7af8a317e24e31f4ee276ecb6d1f5f44e5bd11e2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 29 Jun 2024 06:29:46 +0000 Subject: [PATCH 655/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 85 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 65fbe06..eae1268 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -39,6 +39,7 @@ Table of Contents *lazy.nvim-table-of-contents* 8. 🔥 Developers |lazy.nvim-🔥-developers| - Best Practices |lazy.nvim-🔥-developers-best-practices| - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| 9. Links |lazy.nvim-links| ============================================================================== @@ -1260,6 +1261,90 @@ Use `vim.log.levels.TRACE` to only show the message as a **status** message for the task. + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + ============================================================================== 9. Links *lazy.nvim-links* From 695a05872a5b44e366e5532eb2fe38a64fae8357 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 10:18:31 +0200 Subject: [PATCH 656/815] feat(plugin): allow loading specs without pkg --- lua/lazy/core/plugin.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 84660e6..f917b19 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -21,7 +21,7 @@ M.Spec = Spec M.LOCAL_SPEC = ".lazy.lua" ---@param spec? LazySpec ----@param opts? {optional?:boolean} +---@param opts? {optional?:boolean, pkg?:boolean} function Spec.new(spec, opts) local self = setmetatable({}, Spec) self.meta = Meta.new(self) @@ -30,7 +30,9 @@ function Spec.new(spec, opts) self.notifs = {} self.ignore_installed = {} self.optional = opts and opts.optional - self.meta:load_pkgs() + if not (opts and opts.pkg == false) then + self.meta:load_pkgs() + end if spec then self:parse(spec) end From 00c23e72a387614e4c2c8988181c8c07a2e81cf0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 10:20:23 +0200 Subject: [PATCH 657/815] chore(main): release 11.8.0 (#1583) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 2f14177..28170d0 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.7.0" + ".": "11.8.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fd257c..17ff0cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.8.0](https://github.com/folke/lazy.nvim/compare/v11.7.0...v11.8.0) (2024-06-29) + + +### Features + +* **plugin:** allow loading specs without pkg ([695a058](https://github.com/folke/lazy.nvim/commit/695a05872a5b44e366e5532eb2fe38a64fae8357)) + ## [11.7.0](https://github.com/folke/lazy.nvim/compare/v11.6.0...v11.7.0) (2024-06-29) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4d6bca7..415a2b8 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -218,7 +218,7 @@ M.defaults = { debug = false, } -M.version = "11.7.0" -- x-release-please-version +M.version = "11.8.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 3513227a9a41c8e6366e1719f4cefbe891ca73d2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 10:36:35 +0200 Subject: [PATCH 658/815] fix(async): remove debug assert --- lua/lazy/async.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua index 356f4b1..58145a6 100644 --- a/lua/lazy/async.lua +++ b/lua/lazy/async.lua @@ -153,9 +153,7 @@ end function M.running() local co = coroutine.running() if co then - local async = M._threads[co] - assert(async, "In coroutine without async context") - return async + return M._threads[co] end end From 8dd947fccddbf70893a1f0ae6522361cc1777609 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 10:37:55 +0200 Subject: [PATCH 659/815] chore(main): release 11.8.1 (#1584) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 28170d0..01a094f 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.8.0" + ".": "11.8.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 17ff0cd..ec7ec51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.8.1](https://github.com/folke/lazy.nvim/compare/v11.8.0...v11.8.1) (2024-06-29) + + +### Bug Fixes + +* **async:** remove debug assert ([3513227](https://github.com/folke/lazy.nvim/commit/3513227a9a41c8e6366e1719f4cefbe891ca73d2)) + ## [11.8.0](https://github.com/folke/lazy.nvim/compare/v11.7.0...v11.8.0) (2024-06-29) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 415a2b8..f3ce188 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -218,7 +218,7 @@ M.defaults = { debug = false, } -M.version = "11.8.0" -- x-release-please-version +M.version = "11.8.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 9ab306169060eeab7ebca00653318683e72ab62d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 11:44:31 +0200 Subject: [PATCH 660/815] perf(rocks): `vim.fn.executable` is slow on WSL2, so only check for `luarocks` when needed. Closes #1585 --- lua/lazy/core/config.lua | 14 ++++++++++++-- lua/lazy/core/plugin.lua | 8 ++++---- lua/lazy/health.lua | 4 ++-- lua/lazy/pkg/rockspec.lua | 6 +++--- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f3ce188..cb360ec 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -49,8 +49,11 @@ M.defaults = { enabled = true, root = vim.fn.stdpath("data") .. "/lazy-rocks", server = "https://nvim-neorocks.github.io/rocks-binaries/", - -- use hererocks to install luarocks. - hererocks = vim.fn.executable("luarocks") == 0, + -- use hererocks to install luarocks? + -- set to `nil` to use hererocks when luarocks is not found + -- set to `true` to always use hererocks + -- set to `false` to always use luarocks + hererocks = nil, }, dev = { ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects @@ -218,6 +221,13 @@ M.defaults = { debug = false, } +function M.hererocks() + if M.options.rocks.hererocks == nil then + M.options.rocks.hererocks = vim.fn.executable("luarocks") == 0 + end + return M.options.rocks.hererocks +end + M.version = "11.8.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index f917b19..26b3f6e 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -336,16 +336,16 @@ function M.load() end -- add hererocks when enabled and needed - if Config.options.rocks.hererocks then - for _, plugin in pairs(Config.spec.plugins) do - if plugin.build == "rockspec" then + for _, plugin in pairs(Config.spec.plugins) do + if plugin.build == "rockspec" then + if Config.hererocks() then Config.spec.meta:add({ "luarocks/hererocks", build = "rockspec", lazy = true, }) - break end + break end end diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 60cb61e..b3bf6f2 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -125,7 +125,7 @@ function M.check() start("luarocks") if Config.options.rocks.enabled then - if Config.options.rocks.hererocks then + if Config.hererocks() then info("checking `hererocks` installation") else info("checking `luarocks` installation") @@ -155,7 +155,7 @@ function M.check() "Lazy won't be able to install plugins that require `luarocks`.", "Here's what you can do:", " - fix your `luarocks` installation", - Config.options.rocks.hererocks and " - disable *hererocks* with `opts.rocks.hererocks = false`" + Config.hererocks() and " - disable *hererocks* with `opts.rocks.hererocks = false`" or " - enable `hererocks` with `opts.rocks.hererocks = true`", " - disable `luarocks` support completely with `opts.rocks.enabled = false`", }, "\n")) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index c89ab3c..e1d2c6e 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -72,7 +72,7 @@ function M.check(opts) }, opts or {}) local ok = false - if Config.options.rocks.hererocks then + if Config.hererocks() then if M.hererocks.building() then ok = true else @@ -119,7 +119,7 @@ function M.build(task) "", "This plugin requires `luarocks`. Try one of the following:", " - fix your `luarocks` installation", - Config.options.rocks.hererocks and " - disable *hererocks* with `opts.rocks.hererocks = false`" + Config.hererocks() and " - disable *hererocks* with `opts.rocks.hererocks = false`" or " - enable `hererocks` with `opts.rocks.hererocks = true`", " - disable `luarocks` support completely with `opts.rocks.enabled = false`", }) @@ -132,7 +132,7 @@ function M.build(task) local env = {} local luarocks = "luarocks" - if Config.options.rocks.hererocks then + if Config.hererocks() then -- hererocks is still building, so skip for now -- a new build will happen in the next round if M.hererocks.building() then From 09f69bae4bb9661318599b3668e9fd19954cd7c7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 12:00:15 +0200 Subject: [PATCH 661/815] ci: dispatch docs gen from main --- .github/workflows/ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1f514d..678322d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,13 @@ jobs: nvim --version [ ! -d tests ] && exit 0 ./tests/run + docs: + runs-on: ubuntu-latest + needs: tests + steps: + - name: Generate Docs + shell: bash + run: gh workflow run "Deploy to Github Pages" --ref docs community: runs-on: ubuntu-latest steps: @@ -61,6 +68,7 @@ jobs: if: ${{ github.ref == 'refs/heads/main' }} needs: - tests + - docs runs-on: ubuntu-latest steps: - uses: googleapis/release-please-action@v4 From 07ccb49ace9ea4a5c1426ea0f620ad8fda28bf43 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 12:01:52 +0200 Subject: [PATCH 662/815] ci: set env for docs --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 678322d..cd2ff10 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,6 +29,8 @@ jobs: docs: runs-on: ubuntu-latest needs: tests + env: + GH_TOKEN: ${{ github.token }} steps: - name: Generate Docs shell: bash From 440999fc5aa5073edd542a187c6cd65df2788a16 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 12:03:42 +0200 Subject: [PATCH 663/815] ci: fix --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cd2ff10..6b9c8e6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,13 +32,16 @@ jobs: env: GH_TOKEN: ${{ github.token }} steps: + - uses: actions/checkout@v4 + with: + ref: docs - name: Generate Docs shell: bash run: gh workflow run "Deploy to Github Pages" --ref docs community: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Neovim shell: bash run: | From 332a7ff9b3d226529d8afda4e61979e8b410f350 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 12:06:54 +0200 Subject: [PATCH 664/815] ci: auto-commit-action v5 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6b9c8e6..029531d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -62,7 +62,7 @@ jobs: run: | nvim -l lua/lazy/build.lua - name: Push changes - uses: stefanzweifel/git-auto-commit-action@v4 + uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: "chore(build): auto-generate rockspec mappings" commit_user_name: "github-actions[bot]" From a75d950b8f356733ad2d20c4bdb794179e6d4ff1 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 13:52:50 +0200 Subject: [PATCH 665/815] fix(process): deal with process errors --- lua/lazy/manage/process.lua | 9 +++------ lua/lazy/util.lua | 13 +++++++++++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index f29d978..c4a4baf 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -42,8 +42,8 @@ function Process.new(cmd, opts) opts = opts or {} opts.args = opts.args or {} if type(cmd) == "table" then - self.cmd = table.remove(cmd, 1) - vim.list_extend(opts.args, cmd) + self.cmd = cmd[1] + vim.list_extend(opts.args, vim.list_slice(cmd, 2)) else self.cmd = cmd end @@ -233,10 +233,7 @@ function M.exec(cmd, opts) opts = opts or {} local proc = M.spawn(cmd, opts) proc:wait() - if proc.code ~= 0 then - error("Process failed with code " .. proc.code) - end - return vim.split(proc.data, "\n") + return vim.split(proc.data, "\n"), proc.code end return M diff --git a/lua/lazy/util.lua b/lua/lazy/util.lua index d1ae7fd..fed140c 100644 --- a/lua/lazy/util.lua +++ b/lua/lazy/util.lua @@ -162,12 +162,21 @@ end ---@param opts? LazyCmdOptions|{filetype?:string} function M.float_cmd(cmd, opts) opts = opts or {} + local Process = require("lazy.manage.process") + local lines, code = Process.exec(cmd, { cwd = opts.cwd }) + if code ~= 0 then + M.error({ + "`" .. table.concat(cmd, " ") .. "`", + "", + "## Error", + table.concat(lines, "\n"), + }, { title = "Command Failed (" .. code .. ")" }) + return + end local float = M.float(opts) if opts.filetype then vim.bo[float.buf].filetype = opts.filetype end - local Process = require("lazy.manage.process") - local lines = Process.exec(cmd, { cwd = opts.cwd }) vim.api.nvim_buf_set_lines(float.buf, 0, -1, false, lines) vim.bo[float.buf].modifiable = false return float From 5d334b9f579aacd09603dd9e19b6730fbfcf4c72 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 13:58:13 +0200 Subject: [PATCH 666/815] fix(ui): save/restore view right before/after rendering --- lua/lazy/view/init.lua | 6 ------ lua/lazy/view/render.lua | 10 ++++++++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 26383da..b27a17e 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -147,13 +147,7 @@ end function M:update() if self.buf and vim.api.nvim_buf_is_valid(self.buf) then - vim.bo[self.buf].modifiable = true - local view = vim.api.nvim_win_call(self.view.win, vim.fn.winsaveview) self.render:update() - vim.api.nvim_win_call(self.view.win, function() - vim.fn.winrestview(view) - end) - vim.bo[self.buf].modifiable = false vim.cmd.redraw() end end diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 640e9b0..b7bd884 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -74,7 +74,17 @@ function M:update() end self:trim() + + vim.bo[self.view.buf].modifiable = true + local view = vim.api.nvim_win_call(self.view.win, vim.fn.winsaveview) + self:render(self.view.buf) + + vim.api.nvim_win_call(self.view.win, function() + vim.fn.winrestview(view) + end) + vim.bo[self.view.buf].modifiable = false + vim.diagnostic.set( Config.ns, self.view.buf, From 5bddef2415240b0fe620bb3dfec31a678bd670d9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 13:59:37 +0200 Subject: [PATCH 667/815] chore(main): release 11.8.2 (#1586) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 01a094f..a30099e 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.8.1" + ".": "11.8.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index ec7ec51..3fe0915 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [11.8.2](https://github.com/folke/lazy.nvim/compare/v11.8.1...v11.8.2) (2024-06-29) + + +### Bug Fixes + +* **process:** deal with process errors ([a75d950](https://github.com/folke/lazy.nvim/commit/a75d950b8f356733ad2d20c4bdb794179e6d4ff1)) +* **ui:** save/restore view right before/after rendering ([5d334b9](https://github.com/folke/lazy.nvim/commit/5d334b9f579aacd09603dd9e19b6730fbfcf4c72)) + + +### Performance Improvements + +* **rocks:** `vim.fn.executable` is slow on WSL2, so only check for `luarocks` when needed. Closes [#1585](https://github.com/folke/lazy.nvim/issues/1585) ([9ab3061](https://github.com/folke/lazy.nvim/commit/9ab306169060eeab7ebca00653318683e72ab62d)) + ## [11.8.1](https://github.com/folke/lazy.nvim/compare/v11.8.0...v11.8.1) (2024-06-29) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index cb360ec..4dc2419 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.8.1" -- x-release-please-version +M.version = "11.8.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 37729140751577e87318c137d90d0e6bb00ceff1 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 14:12:57 +0200 Subject: [PATCH 668/815] fix(ui): when closing details, jump to plugin header. Closes #1338 --- lua/lazy/view/init.lua | 12 +++++++++++- lua/lazy/view/render.lua | 9 +++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index b27a17e..6ff3c81 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -96,7 +96,17 @@ function M.create() name = plugin.name, kind = plugin._.kind, } - self.state.plugin = not vim.deep_equal(self.state.plugin, selected) and selected or nil + + local open = not vim.deep_equal(self.state.plugin, selected) + + if not open then + local row = self.render:get_row(selected) + if row then + vim.api.nvim_win_set_cursor(self.view.win, { row, 8 }) + end + end + + self.state.plugin = open and selected or nil self:update() end end) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index b7bd884..c128147 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -122,6 +122,15 @@ function M:get_plugin(row) end end +---@param selected {name:string, kind?: LazyPluginKind} +function M:get_row(selected) + for _, loc in ipairs(self.locations) do + if loc.kind == selected.kind and loc.name == selected.name then + return loc.from + end + end +end + function M:title() self:nl() local modes = vim.tbl_filter(function(c) From 5e3c112cb32c9cb6e8622aab4446358e039def7c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 29 Jun 2024 14:22:53 +0200 Subject: [PATCH 669/815] feat(ui): use [[ & ]] to navigate between plugins. Fixes #1463 --- lua/lazy/view/config.lua | 2 ++ lua/lazy/view/init.lua | 22 ++++++++++++++++++++++ lua/lazy/view/render.lua | 10 +++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lua/lazy/view/config.lua b/lua/lazy/view/config.lua index e834573..d65f03c 100644 --- a/lua/lazy/view/config.lua +++ b/lua/lazy/view/config.lua @@ -34,6 +34,8 @@ M.keys = { profile_sort = "", profile_filter = "", abort = "", + next = "]]", + prev = "[[", } ---@type table diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 6ff3c81..468ac8a 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -111,6 +111,28 @@ function M.create() end end) + self:on_key(ViewConfig.keys.next, function() + local cursor = vim.api.nvim_win_get_cursor(self.view.win) + for l = 1, #self.render.locations, 1 do + local loc = self.render.locations[l] + if loc.from > cursor[1] then + vim.api.nvim_win_set_cursor(self.view.win, { loc.from, 8 }) + return + end + end + end) + + self:on_key(ViewConfig.keys.prev, function() + local cursor = vim.api.nvim_win_get_cursor(self.view.win) + for l = #self.render.locations, 1, -1 do + local loc = self.render.locations[l] + if loc.from < cursor[1] then + vim.api.nvim_win_set_cursor(self.view.win, { loc.from, 8 }) + return + end + end + end) + self:on_key(ViewConfig.keys.profile_sort, function() if self.state.mode == "profile" then self.state.profile.sort_time_taken = not self.state.profile.sort_time_taken diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index c128147..e1eec6c 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -201,7 +201,15 @@ function M:help() :nl() self:append("or the plugin was just updated. Otherwise the plugin webpage will open."):nl():nl() - self:append("Use "):append("", "LazySpecial"):append(" on a commit or plugin to open the diff view"):nl() + self:append("Use "):append("", "LazySpecial"):append(" on a commit or plugin to open the diff view"):nl():nl() + self + :append("Use ") + :append("<]]>", "LazySpecial") + :append(" and ") + :append("<[[>", "LazySpecial") + :append(" to navigate between plugins") + :nl() + :nl() self:nl() self:append("Keyboard Shortcuts", "LazyH2"):nl() From 0507e19289539396313503f6eb6b02bbe8a5e483 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 17:01:41 +0200 Subject: [PATCH 670/815] chore(main): release 11.9.0 (#1587) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index a30099e..9918aa5 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.8.2" + ".": "11.9.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fe0915..d8fe701 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [11.9.0](https://github.com/folke/lazy.nvim/compare/v11.8.2...v11.9.0) (2024-06-29) + + +### Features + +* **ui:** use [[ & ]] to navigate between plugins. Fixes [#1463](https://github.com/folke/lazy.nvim/issues/1463) ([5e3c112](https://github.com/folke/lazy.nvim/commit/5e3c112cb32c9cb6e8622aab4446358e039def7c)) + + +### Bug Fixes + +* **ui:** when closing details, jump to plugin header. Closes [#1338](https://github.com/folke/lazy.nvim/issues/1338) ([3772914](https://github.com/folke/lazy.nvim/commit/37729140751577e87318c137d90d0e6bb00ceff1)) + ## [11.8.2](https://github.com/folke/lazy.nvim/compare/v11.8.1...v11.8.2) (2024-06-29) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 4dc2419..9319999 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.8.2" -- x-release-please-version +M.version = "11.9.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From c7ed87f9ca03ea412134d6a6ea55b43232eb6b0c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 30 Jun 2024 08:48:03 +0200 Subject: [PATCH 671/815] perf: automatically suspend the scheduler when all threads are waiting (#1591) * perf: automatically suspend the scheduler when all threads are waiting * ci: fix ci * test: cleanup --- .github/workflows/ci.yml | 4 +- lua/lazy/async.lua | 85 ++++++++++++++++++++++------------- lua/lazy/manage/runner.lua | 39 +++++++++------- lua/lazy/manage/task/git.lua | 1 + tests/core/init_spec.lua | 1 - tests/core/plugin_spec.lua | 2 - tests/handlers/keys_spec.lua | 1 - tests/manage/process_spec.lua | 1 - tests/manage/task_spec.lua | 1 - 9 files changed, 81 insertions(+), 54 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 029531d..1a2ed40 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,7 @@ jobs: ./tests/run docs: runs-on: ubuntu-latest + if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'folke' }} needs: tests env: GH_TOKEN: ${{ github.token }} @@ -40,6 +41,7 @@ jobs: run: gh workflow run "Deploy to Github Pages" --ref docs community: runs-on: ubuntu-latest + if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'folke' }} steps: - uses: actions/checkout@v4 - name: Install Neovim @@ -70,7 +72,7 @@ jobs: commit_author: "github-actions[bot] " release: name: release - if: ${{ github.ref == 'refs/heads/main' }} + if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'folke' }} needs: - tests - docs diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua index 58145a6..7848b7d 100644 --- a/lua/lazy/async.lua +++ b/lua/lazy/async.lua @@ -1,11 +1,14 @@ +local Util = require("lazy.core.util") + local M = {} ---@type Async[] -M._queue = {} -M._executor = assert(vim.loop.new_timer()) +M._active = {} +---@type Async[] +M._suspended = {} +M._executor = assert(vim.loop.new_check()) -M.TIMER = 10 -M.BUDGET = 100 +M.BUDGET = 10 ---@type table M._threads = setmetatable({}, { __mode = "k" }) @@ -42,11 +45,6 @@ function Async:init(fn) return M.add(self) end -function Async:restart() - assert(not self:running(), "Cannot restart a running async") - self:init(self._fn) -end - ---@param event AsyncEvent ---@param cb async fun(res:any, async:Async) function Async:on(event, cb) @@ -77,27 +75,41 @@ function Async:sleep(ms) end ---@async -function Async:suspend() +---@param yield? boolean +function Async:suspend(yield) self._suspended = true - if coroutine.running() == self._co then + if coroutine.running() == self._co and yield ~= false then coroutine.yield() end end function Async:resume() self._suspended = false + M._run() end -function Async:wait() +---@async +---@param yield? boolean +function Async:wake(yield) local async = M.running() + assert(async, "Not in an async context") + self:on("done", function() + async:resume() + end) + async:suspend(yield) +end + +---@async +function Async:wait() if coroutine.running() == self._co then error("Cannot wait on self") end - while self:running() do - if async then - coroutine.yield() - else + local async = M.running() + if async then + self:wake() + else + while self:running() do vim.wait(10) end end @@ -121,35 +133,44 @@ function Async:step() end function M.step() - local budget = M.BUDGET * 1e6 local start = vim.uv.hrtime() - local count = #M._queue - local i = 0 - while #M._queue > 0 and vim.uv.hrtime() - start < budget do - ---@type Async - local state = table.remove(M._queue, 1) - if state:step() then - table.insert(M._queue, state) - end - i = i + 1 - if i >= count then + for _ = 1, #M._active do + if vim.uv.hrtime() - start > M.BUDGET * 1e6 then break end + local state = table.remove(M._active, 1) + if state:step() then + if state._suspended then + table.insert(M._suspended, state) + else + table.insert(M._active, state) + end + end end - if #M._queue == 0 then + for _ = 1, #M._suspended do + local state = table.remove(M._suspended, 1) + table.insert(state._suspended and M._suspended or M._active, state) + end + + -- print("step", #M._active, #M._suspended) + if #M._active == 0 then return M._executor:stop() end end ---@param async Async function M.add(async) - table.insert(M._queue, async) - if not M._executor:is_active() then - M._executor:start(1, M.TIMER, vim.schedule_wrap(M.step)) - end + table.insert(M._active, async) + M._run() return async end +function M._run() + if not M._executor:is_active() then + M._executor:start(vim.schedule_wrap(M.step)) + end +end + function M.running() local co = coroutine.running() if co then diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index c5f5c75..d551ce5 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -78,6 +78,7 @@ function Runner:_start() ---@type number? local wait_step = nil + ---@async ---@param resume? boolean local function continue(resume) active = 0 @@ -114,22 +115,30 @@ function Runner:_start() end local s = state[name] local plugin = self:plugin(name) - if s.step == #self._pipeline then - -- done - s.task = nil - plugin._.working = false - elseif s.step < #self._pipeline then - -- next - s.step = s.step + 1 - local step = self._pipeline[s.step] - if step.task == "wait" then + while s.step <= #self._pipeline do + if s.step == #self._pipeline then + -- done + s.task = nil plugin._.working = false - waiting = waiting + 1 - wait_step = s.step - else - s.task = self:queue(plugin, step) - plugin._.working = true - active = active + 1 + break + elseif s.step < #self._pipeline then + -- next + s.step = s.step + 1 + local step = self._pipeline[s.step] + if step.task == "wait" then + plugin._.working = false + waiting = waiting + 1 + wait_step = s.step + break + else + s.task = self:queue(plugin, step) + plugin._.working = true + if s.task then + active = active + 1 + s.task:wake(false) + break + end + end end end end diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 4bd7134..774df16 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -21,6 +21,7 @@ M.log = { ---@async ---@param opts {args?: string[], updated?:boolean, check?:boolean} run = function(self, opts) + -- self:spawn({ "sleep", "5" }) local args = { "log", "--pretty=format:%h %s (%cr)", diff --git a/tests/core/init_spec.lua b/tests/core/init_spec.lua index 4970871..356f8e4 100644 --- a/tests/core/init_spec.lua +++ b/tests/core/init_spec.lua @@ -1,4 +1,3 @@ ----@module 'luassert' local Util = require("lazy.core.util") describe("init", function() diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index d810339..166dc2a 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -1,5 +1,3 @@ ----@module 'luassert' - local Config = require("lazy.core.config") local Handler = require("lazy.core.handler") local Plugin = require("lazy.core.plugin") diff --git a/tests/handlers/keys_spec.lua b/tests/handlers/keys_spec.lua index d6a9df4..6254db8 100644 --- a/tests/handlers/keys_spec.lua +++ b/tests/handlers/keys_spec.lua @@ -1,4 +1,3 @@ ----@module 'luassert' local Keys = require("lazy.core.handler.keys") describe("keys", function() diff --git a/tests/manage/process_spec.lua b/tests/manage/process_spec.lua index 0fbbe89..03b653e 100644 --- a/tests/manage/process_spec.lua +++ b/tests/manage/process_spec.lua @@ -1,4 +1,3 @@ ----@module 'luassert' local Async = require("lazy.async") local Process = require("lazy.manage.process") diff --git a/tests/manage/task_spec.lua b/tests/manage/task_spec.lua index e161fa2..fdd9c35 100644 --- a/tests/manage/task_spec.lua +++ b/tests/manage/task_spec.lua @@ -1,4 +1,3 @@ ----@module 'luassert' --# selene:allow(incorrect_standard_library_use) local Task = require("lazy.manage.task") From 2f4ac035bcc66292250de7134d73007b147f64e8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 30 Jun 2024 09:13:04 +0200 Subject: [PATCH 672/815] perf: suspend when tasks are active --- lua/lazy/async.lua | 19 ++++++++++++++++++- lua/lazy/manage/runner.lua | 4 +++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua index 7848b7d..5cbdb1b 100644 --- a/lua/lazy/async.lua +++ b/lua/lazy/async.lua @@ -152,12 +152,29 @@ function M.step() table.insert(state._suspended and M._suspended or M._active, state) end - -- print("step", #M._active, #M._suspended) + -- M.debug() if #M._active == 0 then return M._executor:stop() end end +function M.debug() + local lines = { + "- active: " .. #M._active, + "- suspended: " .. #M._suspended, + } + for _, async in ipairs(M._active) do + local info = debug.getinfo(async._fn) + local file = vim.fn.fnamemodify(info.short_src:sub(1), ":~:.") + table.insert(lines, ("%s:%d"):format(file, info.linedefined)) + if #lines > 10 then + break + end + end + local msg = table.concat(lines, "\n") + M._notif = vim.notify(msg, nil, { replace = M._notif }) +end + ---@param async Async function M.add(async) table.insert(M._active, async) diff --git a/lua/lazy/manage/runner.lua b/lua/lazy/manage/runner.lua index d551ce5..81dcde0 100644 --- a/lua/lazy/manage/runner.lua +++ b/lua/lazy/manage/runner.lua @@ -153,7 +153,9 @@ function Runner:_start() end continue(true) end - coroutine.yield() + if active > 0 then + self._running:suspend() + end end end From c882227f1fdc4580d14212df8f814a0772951e3d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 30 Jun 2024 12:47:41 +0200 Subject: [PATCH 673/815] chore(main): release 11.9.1 (#1592) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 9918aa5..67fa05d 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.9.0" + ".": "11.9.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index d8fe701..01bbc13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [11.9.1](https://github.com/folke/lazy.nvim/compare/v11.9.0...v11.9.1) (2024-06-30) + + +### Performance Improvements + +* automatically suspend the scheduler when all threads are waiting ([#1591](https://github.com/folke/lazy.nvim/issues/1591)) ([c7ed87f](https://github.com/folke/lazy.nvim/commit/c7ed87f9ca03ea412134d6a6ea55b43232eb6b0c)) +* suspend when tasks are active ([2f4ac03](https://github.com/folke/lazy.nvim/commit/2f4ac035bcc66292250de7134d73007b147f64e8)) + ## [11.9.0](https://github.com/folke/lazy.nvim/compare/v11.8.2...v11.9.0) (2024-06-29) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9319999..c51f680 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.9.0" -- x-release-please-version +M.version = "11.9.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 1fad61712bd3937dda925775a7736b8efbcbf1a7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 30 Jun 2024 13:35:11 +0200 Subject: [PATCH 674/815] fix(async): make asyncs abortable --- lua/lazy/async.lua | 21 +++++++++++++++++---- lua/lazy/core/util.lua | 4 ++++ lua/lazy/manage/process.lua | 2 +- lua/lazy/view/float.lua | 3 ++- lua/lazy/view/init.lua | 1 + tests/manage/runner_spec.lua | 3 ++- tests/manage/task_spec.lua | 3 ++- 7 files changed, 29 insertions(+), 8 deletions(-) diff --git a/lua/lazy/async.lua b/lua/lazy/async.lua index 5cbdb1b..7a865b3 100644 --- a/lua/lazy/async.lua +++ b/lua/lazy/async.lua @@ -79,7 +79,7 @@ end function Async:suspend(yield) self._suspended = true if coroutine.running() == self._co and yield ~= false then - coroutine.yield() + M.yield() end end @@ -132,12 +132,25 @@ function Async:step() return self:running() end +function M.abort() + for _, async in ipairs(M._active) do + coroutine.resume(async._co, "abort") + end +end + +function M.yield() + if coroutine.yield() == "abort" then + error("aborted", 2) + end +end + function M.step() local start = vim.uv.hrtime() for _ = 1, #M._active do - if vim.uv.hrtime() - start > M.BUDGET * 1e6 then + if Util.exiting() or vim.uv.hrtime() - start > M.BUDGET * 1e6 then break end + local state = table.remove(M._active, 1) if state:step() then if state._suspended then @@ -153,7 +166,7 @@ function M.step() end -- M.debug() - if #M._active == 0 then + if #M._active == 0 or Util.exiting() then return M._executor:stop() end end @@ -183,7 +196,7 @@ function M.add(async) end function M._run() - if not M._executor:is_active() then + if not Util.exiting() and not M._executor:is_active() then M._executor:start(vim.schedule_wrap(M.step)) end end diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index f42cf6a..34ca1d6 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -29,6 +29,10 @@ function M.track(data, time) end end +function M.exiting() + return vim.v.exiting ~= vim.NIL +end + ---@generic T ---@param list T[] ---@param fn fun(v: T):boolean? diff --git a/lua/lazy/manage/process.lua b/lua/lazy/manage/process.lua index c4a4baf..0a67a14 100644 --- a/lua/lazy/manage/process.lua +++ b/lua/lazy/manage/process.lua @@ -93,7 +93,7 @@ function Process:_run() end) self:suspend() while not (self.handle:is_closing() and stdout:is_closing() and stderr:is_closing()) do - coroutine.yield() + Async.yield() end else self.data = "Failed to spawn process " .. self.cmd .. " " .. vim.inspect(self.opts) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index d57b384..3a59069 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -252,7 +252,7 @@ end ---@param fn fun(self?) ---@param desc? string ---@param mode? string[] -function M:on_key(key, fn, desc,mode) +function M:on_key(key, fn, desc, mode) vim.keymap.set(mode or "n", key, function() fn(self) end, { @@ -295,6 +295,7 @@ function M:close(opts) vim.diagnostic.reset(Config.ns, buf) vim.api.nvim_buf_delete(buf, { force = true }) end + vim.cmd.redraw() end) end diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 468ac8a..313d3ad 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -83,6 +83,7 @@ function M.create() vim.keymap.set("n", ViewConfig.keys.abort, function() require("lazy.manage.process").abort() + require("lazy.async").abort() return ViewConfig.keys.abort end, { silent = true, buffer = self.buf, expr = true }) diff --git a/tests/manage/runner_spec.lua b/tests/manage/runner_spec.lua index 925aaf1..a2507c9 100644 --- a/tests/manage/runner_spec.lua +++ b/tests/manage/runner_spec.lua @@ -1,3 +1,4 @@ +local Async = require("lazy.async") local Runner = require("lazy.manage.runner") describe("runner", function() @@ -33,7 +34,7 @@ describe("runner", function() ---@async ---@param task LazyTask run = function(task) - coroutine.yield() + Async.yield() table.insert(runs, { plugin = task.plugin.name, task = task.name }) end, } diff --git a/tests/manage/task_spec.lua b/tests/manage/task_spec.lua index fdd9c35..f41eb80 100644 --- a/tests/manage/task_spec.lua +++ b/tests/manage/task_spec.lua @@ -1,4 +1,5 @@ --# selene:allow(incorrect_standard_library_use) +local Async = require("lazy.async") local Task = require("lazy.manage.task") describe("task", function() @@ -42,7 +43,7 @@ describe("task", function() local running = true ---@async local task = Task.new(plugin, "test", function() - coroutine.yield() + Async.yield() running = false end, opts) assert(task:running()) From a9d7ade203b3f3ee3058c082c62afdf8e4bcb416 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 1 Jul 2024 07:07:49 +0200 Subject: [PATCH 675/815] perf(plugin): minor optim to resolve imports a bit faster --- lua/lazy/core/plugin.lua | 5 ++++- lua/lazy/core/util.lua | 16 +++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 26b3f6e..f9bd04f 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -150,8 +150,11 @@ function Spec:import(spec) local modspecs = {} if type(import) == "string" then - Util.lsmod(import, function(modname) + Util.lsmod(import, function(modname, modpath) modspecs[#modspecs + 1] = modname + package.preload[modname] = function() + return loadfile(modpath)() + end end) table.sort(modspecs) else diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 34ca1d6..185527b 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -287,7 +287,7 @@ function M.find_root(modname) local ret = require("lazy.core.cache").find(modname, { rtp = true, paths = paths, - patterns = { "", ".lua" }, + patterns = { ".lua", "" }, })[1] if not ret and cached then @@ -295,25 +295,27 @@ function M.find_root(modname) ret = require("lazy.core.cache").find(modname, { rtp = false, paths = paths, - patterns = { "", ".lua" }, + patterns = { ".lua", "" }, })[1] end if ret then - local root = ret.modpath:gsub("/init%.lua$", ""):gsub("%.lua$", "") - return root + return ret.modpath:gsub("%.lua$", ""), ret.modpath end end ---@param modname string ---@param fn fun(modname:string, modpath:string) function M.lsmod(modname, fn) - local root = M.find_root(modname) + local root, match = M.find_root(modname) if not root then return end - if vim.uv.fs_stat(root .. ".lua") then - fn(modname, root .. ".lua") + if match:sub(-4) == ".lua" then + fn(modname, match) + if not vim.uv.fs_stat(root) then + return + end end M.ls(root, function(path, name, type) From d0921f5b9b3d2c5e09618da55a018228edcc4d16 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 2 Jul 2024 13:42:53 +0200 Subject: [PATCH 676/815] fix(health): check for errors when executing commands. Closes #1599 --- lua/lazy/health.lua | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index b3bf6f2..9e2a869 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -37,13 +37,17 @@ function M.have(cmd, opts) for _, c in ipairs(cmd) do if vim.fn.executable(c) == 1 then local version = vim.fn.system(c .. " " .. opts.version) or "" - version = vim.trim(vim.split(version, "\n")[1]) - version = version:gsub("^%s*" .. vim.pesc(c) .. "%s*", "") - if opts.version_pattern and not version:find(opts.version_pattern, 1, true) then - opts.warn(("`%s` version `%s` needed, but found `%s`"):format(c, opts.version_pattern, version)) + if vim.v.shell_error ~= 0 then + opts.error(("failed to get version of {%s}\n%s"):format(c, version)) else - found = ("{%s} `%s`"):format(c, version) - break + version = vim.trim(vim.split(version, "\n")[1]) + version = version:gsub("^%s*" .. vim.pesc(c) .. "%s*", "") + if opts.version_pattern and not version:find(opts.version_pattern, 1, true) then + opts.warn(("`%s` version `%s` needed, but found `%s`"):format(c, opts.version_pattern, version)) + else + found = ("{%s} `%s`"):format(c, version) + break + end end end end From 36c85945ee4ba7553132bfc07280817c8f578e18 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 3 Jul 2024 08:20:37 +0000 Subject: [PATCH 677/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index eae1268..ccf4829 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -157,7 +157,16 @@ STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not (vim.uv or vim.loop).fs_stat(lazypath) then local lazyrepo = "https://github.com/folke/lazy.nvim.git" - vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end end vim.opt.rtp:prepend(lazypath) @@ -196,7 +205,16 @@ SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not (vim.uv or vim.loop).fs_stat(lazypath) then local lazyrepo = "https://github.com/folke/lazy.nvim.git" - vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end end vim.opt.rtp:prepend(lazypath) From cea5920abb202753004440f94ec39bcf2927e02e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:11:21 +0200 Subject: [PATCH 678/815] chore(main): release 11.9.2 (#1595) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 67fa05d..cd35eb4 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.9.1" + ".": "11.9.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 01bbc13..84044cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [11.9.2](https://github.com/folke/lazy.nvim/compare/v11.9.1...v11.9.2) (2024-07-02) + + +### Bug Fixes + +* **async:** make asyncs abortable ([1fad617](https://github.com/folke/lazy.nvim/commit/1fad61712bd3937dda925775a7736b8efbcbf1a7)) +* **health:** check for errors when executing commands. Closes [#1599](https://github.com/folke/lazy.nvim/issues/1599) ([d0921f5](https://github.com/folke/lazy.nvim/commit/d0921f5b9b3d2c5e09618da55a018228edcc4d16)) + + +### Performance Improvements + +* **plugin:** minor optim to resolve imports a bit faster ([a9d7ade](https://github.com/folke/lazy.nvim/commit/a9d7ade203b3f3ee3058c082c62afdf8e4bcb416)) + ## [11.9.1](https://github.com/folke/lazy.nvim/compare/v11.9.0...v11.9.1) (2024-06-30) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index c51f680..b7f5c14 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.9.1" -- x-release-please-version +M.version = "11.9.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 0f2786bcc91347188627534471ee75c3f6f16b2d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 4 Jul 2024 15:17:02 +0200 Subject: [PATCH 679/815] feat(profiling): merge VeryLazy stats and show startuptime in profile view --- lua/lazy/core/handler/event.lua | 8 ++++++-- lua/lazy/core/util.lua | 2 ++ lua/lazy/stats.lua | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/handler/event.lua b/lua/lazy/core/handler/event.lua index aff4572..a34e0c5 100644 --- a/lua/lazy/core/handler/event.lua +++ b/lua/lazy/core/handler/event.lua @@ -75,7 +75,9 @@ function M:_add(event) end -- HACK: work-around for https://github.com/neovim/neovim/issues/25526 done = true - Util.track({ [self.type] = event.id }) + if event.id ~= "VeryLazy" then + Util.track({ [self.type] = event.id }) + end local state = M.get_state(ev.event, ev.buf, ev.data) @@ -86,7 +88,9 @@ function M:_add(event) for _, s in ipairs(state) do M.trigger(s) end - Util.track() + if event.id ~= "VeryLazy" then + Util.track() + end end, }) end diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 185527b..6d7c3b8 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -171,7 +171,9 @@ function M.very_lazy() return end vim.g.did_very_lazy = true + M.track({ event = "VeryLazy" }) vim.api.nvim_exec_autocmds("User", { pattern = "VeryLazy", modeline = false }) + M.track() end) end diff --git a/lua/lazy/stats.lua b/lua/lazy/stats.lua index 36865db..015a2be 100644 --- a/lua/lazy/stats.lua +++ b/lua/lazy/stats.lua @@ -21,6 +21,7 @@ M.C = nil function M.on_ui_enter() M._stats.startuptime = M.track("UIEnter") + require("lazy.core.util").track({ start = "startuptime" }, M._stats.startuptime * 1e6) vim.api.nvim_exec_autocmds("User", { pattern = "LazyVimStarted", modeline = false }) end From 6fdd904ee45b66d933c5d2f72bcec337e13744f8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 4 Jul 2024 15:19:41 +0200 Subject: [PATCH 680/815] fix(config): determine headless only during startup. Fixes #1608 --- lua/lazy/core/config.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index b7f5c14..f77a29d 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -253,8 +253,9 @@ M.mapleader = nil ---@type string M.maplocalleader = nil +local headless = #vim.api.nvim_list_uis() == 0 function M.headless() - return #vim.api.nvim_list_uis() == 0 + return headless end ---@param opts? LazyConfig From 923e1aa7a49d945afa4c03da4f8ff052cd6d14a6 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 4 Jul 2024 16:16:39 +0200 Subject: [PATCH 681/815] fix(plugin): local spec name --- lua/lazy/core/plugin.lua | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index f9bd04f..d121fdf 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -275,15 +275,6 @@ function M.update_rocks_state() end end ----@param path string -function M.local_spec(path) - local file = vim.secure.read(path) - if file then - return loadstring(file)() - end - return {} -end - ---@return LazySpecImport? function M.find_local_spec() if not Config.options.local_spec then @@ -298,7 +289,7 @@ function M.find_local_spec() import = function() local data = vim.secure.read(file) if data then - return loadstring(data)() + return loadstring(data, M.LOCAL_SPEC)() end return {} end, From a17ad27435eb710e5e942b60a717d2a6af98c38e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 4 Jul 2024 17:53:45 +0200 Subject: [PATCH 682/815] build: better minit --- bootstrap.lua | 19 ++++------ lua/lazy/minit.lua | 65 +++++++++++++++++++++++++++------ tests/{busted.lua => minit.lua} | 7 ++-- tests/run | 2 +- 4 files changed, 67 insertions(+), 26 deletions(-) rename tests/{busted.lua => minit.lua} (59%) diff --git a/bootstrap.lua b/bootstrap.lua index e39db4d..dfafd59 100644 --- a/bootstrap.lua +++ b/bootstrap.lua @@ -13,6 +13,10 @@ function M.setup() end end + if vim.env.LAZY_PATH and not vim.uv.fs_stat(vim.env.LAZY_PATH) then + vim.env.LAZY_PATH = nil + end + local lazypath = vim.env.LAZY_PATH or vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.env.LAZY_PATH and not (vim.uv or vim.loop).fs_stat(lazypath) then vim.api.nvim_echo({ @@ -26,19 +30,12 @@ function M.setup() pcall(vim.fn.system, { "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) if not ok or vim.v.shell_error ~= 0 then vim.api.nvim_echo({ - { - "Failed to clone lazy.nvim\n", - "ErrorMsg", - }, - { - vim.trim(out or ""), - "WarningMsg", - }, - { "\nPress any key to exit", "MoreMsg" }, + { "Failed to clone lazy.nvim\n", "ErrorMsg" }, + { vim.trim(out or ""), "WarningMsg" }, + { "\nPress any key to exit...", "MoreMsg" }, }, true, {}) - vim.fn.getchar() - vim.cmd([[quit]]) + os.exit(1) end end vim.opt.rtp:prepend(lazypath) diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua index 7da2b2a..3874a18 100644 --- a/lua/lazy/minit.lua +++ b/lua/lazy/minit.lua @@ -20,11 +20,27 @@ function M.extend(defaults, opts) return vim.tbl_deep_extend("force", defaults, opts, { spec = spec }) end +---@param opts LazyConfig function M.setup(opts) opts = M.extend({ change_detection = { enabled = false }, }, opts) + local args = {} + local is_busted = false + for _, a in ipairs(_G.arg) do + if a == "--busted" then + is_busted = true + else + table.insert(args, a) + end + end + _G.arg = args + + if is_busted then + opts = M.busted.setup(opts) + end + -- set stdpaths to use .tests if vim.env.LAZY_STDPATH then local root = vim.fn.fnamemodify(vim.env.LAZY_STDPATH, ":p") @@ -48,6 +64,10 @@ function M.setup(opts) vim.cmd.close() end end + + if is_busted then + M.busted.run() + end end function M.repro(opts) @@ -68,18 +88,9 @@ function M.repro(opts) M.setup(opts) end ----@param opts LazyConfig -function M.busted(opts) - opts = M.extend({ - spec = { - "lunarmodules/busted", - { dir = vim.fn.fnamemodify(".", ":p") }, - }, - rocks = { hererocks = true }, - }, opts) - - M.setup(opts) +M.busted = {} +function M.busted.run() local Config = require("lazy.core.config") -- disable termnial output for the tests Config.options.headless = {} @@ -93,4 +104,36 @@ function M.busted(opts) }) or os.exit(1) end +---@param opts LazyConfig +function M.busted.setup(opts) + local args = table.concat(_G.arg, " ") + local json = args:find("--output[ =]json") + + return M.extend({ + spec = { + "lunarmodules/busted", + { dir = vim.uv.cwd() }, + }, + headless = { + process = not json, + log = not json, + task = not json, + }, + rocks = { hererocks = true }, + }, opts) +end + +---@param opts LazyConfig +function M.busted.init(opts) + opts = M.busted.setup(opts) + M.setup(opts) + M.busted.run() +end + +setmetatable(M.busted, { + __call = function(_, opts) + M.busted.init(opts) + end, +}) + return M diff --git a/tests/busted.lua b/tests/minit.lua similarity index 59% rename from tests/busted.lua rename to tests/minit.lua index 7292d3e..e62be39 100755 --- a/tests/busted.lua +++ b/tests/minit.lua @@ -5,7 +5,8 @@ vim.env.LAZY_STDPATH = ".tests" vim.opt.rtp:prepend(".") -- Setup lazy.nvim -require("lazy.minit").busted({ - spec = {}, - stdpath = ".tests", +require("lazy.minit").setup({ + spec = { + { dir = vim.uv.cwd() }, + }, }) diff --git a/tests/run b/tests/run index 7872f5a..f1399de 100755 --- a/tests/run +++ b/tests/run @@ -1,3 +1,3 @@ #!/bin/sh -nvim -l tests/busted.lua tests -o utfTerminal "$@" +nvim -l tests/minit.lua --busted tests -o utfTerminal "$@" From 1225f1dc60342d82b9de031406c66516c3dfc564 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 4 Jul 2024 18:00:59 +0200 Subject: [PATCH 683/815] ci: dont enable local specs for minit --- lua/lazy/minit.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua index 3874a18..838ac36 100644 --- a/lua/lazy/minit.lua +++ b/lua/lazy/minit.lua @@ -23,6 +23,7 @@ end ---@param opts LazyConfig function M.setup(opts) opts = M.extend({ + local_spec = false, change_detection = { enabled = false }, }, opts) From 851b12034d1eb77acda84537805740923af3fab4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 4 Jul 2024 18:05:36 +0200 Subject: [PATCH 684/815] ci: use main for bootstrap --- bootstrap.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bootstrap.lua b/bootstrap.lua index dfafd59..16d9f1d 100644 --- a/bootstrap.lua +++ b/bootstrap.lua @@ -26,8 +26,13 @@ function M.setup() }, }, true, {}) local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local ok, out = - pcall(vim.fn.system, { "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + local ok, out = pcall(vim.fn.system, { + "git", + "clone", + "--filter=blob:none", + lazyrepo, + lazypath, + }) if not ok or vim.v.shell_error ~= 0 then vim.api.nvim_echo({ { "Failed to clone lazy.nvim\n", "ErrorMsg" }, From 407e65c7924989c1efed6bbc89e6287e2d140f02 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 4 Jul 2024 21:01:57 +0200 Subject: [PATCH 685/815] chore(main): release 11.10.0 (#1609) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index cd35eb4..d58642f 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.9.2" + ".": "11.10.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 84044cd..a6ad34e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [11.10.0](https://github.com/folke/lazy.nvim/compare/v11.9.2...v11.10.0) (2024-07-04) + + +### Features + +* **profiling:** merge VeryLazy stats and show startuptime in profile view ([0f2786b](https://github.com/folke/lazy.nvim/commit/0f2786bcc91347188627534471ee75c3f6f16b2d)) + + +### Bug Fixes + +* **config:** determine headless only during startup. Fixes [#1608](https://github.com/folke/lazy.nvim/issues/1608) ([6fdd904](https://github.com/folke/lazy.nvim/commit/6fdd904ee45b66d933c5d2f72bcec337e13744f8)) +* **plugin:** local spec name ([923e1aa](https://github.com/folke/lazy.nvim/commit/923e1aa7a49d945afa4c03da4f8ff052cd6d14a6)) + ## [11.9.2](https://github.com/folke/lazy.nvim/compare/v11.9.1...v11.9.2) (2024-07-02) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f77a29d..28e942c 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.9.2" -- x-release-please-version +M.version = "11.10.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From baac5517770abd6eee63d11cf4791ef5bf5702e8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 5 Jul 2024 09:01:01 +0200 Subject: [PATCH 686/815] fix(lockfile): keep cond=false and enabed=false in lockfile. Fixes #1535. Fixes #1606 --- lua/lazy/manage/lock.lua | 55 ++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/lua/lazy/manage/lock.lua b/lua/lazy/manage/lock.lua index c7ceb4e..a1b4c74 100644 --- a/lua/lazy/manage/lock.lua +++ b/lua/lazy/manage/lock.lua @@ -3,43 +3,43 @@ local Git = require("lazy.manage.git") local M = {} ----@type table +---@alias LazyLockfile table +---@type LazyLockfile M.lock = {} M._loaded = false function M.update() + M.load() vim.fn.mkdir(vim.fn.fnamemodify(Config.options.lockfile, ":p:h"), "p") local f = assert(io.open(Config.options.lockfile, "wb")) f:write("{\n") - M.lock = {} - ---@param plugin LazyPlugin - local plugins = vim.tbl_filter(function(plugin) - return not plugin._.is_local and plugin._.installed - end, Config.plugins) + -- keep disabled and cond plugins + for name in pairs(M.lock) do + if not (Config.spec.disabled[name] or Config.spec.ignore_installed[name]) then + M.lock[name] = nil + end + end + + for _, plugin in pairs(Config.plugins) do + if not plugin._.is_local and plugin._.installed then + local info = assert(Git.info(plugin.dir)) + M.lock[plugin.name] = { + branch = info.branch or assert(Git.get_branch(plugin)), + commit = assert(info.commit, "commit is nil"), + } + end + end - ---@param plugin LazyPlugin ---@type string[] - local names = vim.tbl_map(function(plugin) - return plugin.name - end, plugins) + local names = vim.tbl_keys(M.lock) table.sort(names) for n, name in ipairs(names) do - local plugin = Config.plugins[name] - if not plugin._.is_local and plugin._.installed then - local info = assert(Git.info(plugin.dir)) - if not info.branch then - info.branch = assert(Git.get_branch(plugin)) - end - info.commit = info.commit - -- f:write(([[ [%q] = { branch = %q, commit = %q },]]):format(name, info.branch, info.commit) .. "\n") - f:write(([[ %q: { "branch": %q, "commit": %q }]]):format(name, info.branch, info.commit)) - if n ~= #names then - f:write(",\n") - end - ---@diagnostic disable-next-line: assign-type-mismatch - M.lock[plugin.name] = info + local info = M.lock[name] + f:write(([[ %q: { "branch": %q, "commit": %q }]]):format(name, info.branch, info.commit)) + if n ~= #names then + f:write(",\n") end end f:write("\n}") @@ -47,6 +47,9 @@ function M.update() end function M.load() + if M._loaded then + return + end M.lock = {} M._loaded = true local f = io.open(Config.options.lockfile, "r") @@ -64,9 +67,7 @@ end ---@param plugin LazyPlugin ---@return {commit:string, branch:string} function M.get(plugin) - if not M._loaded then - M.load() - end + M.load() return M.lock[plugin.name] end From a1d23e80badccc407d6b289d1c366ff2888812b6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 Jul 2024 07:31:34 +0000 Subject: [PATCH 687/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index ccf4829..73bd0ae 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -291,23 +291,25 @@ SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - --------------------------------------------------------------------------------------------------- + -------------------------------------------------------------------------------------------------- Property Type Description - ---------- ----------------------------- ---------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during startup + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during. Mostly useful + for setting vim.g.* configuration used by Vim plugins + startup - opts table or opts should be a table (will be merged with parent specs), - fun(LazyPlugin, opts:table) return a table (replaces parent specs) or should change a - table. The table will be passed to the Plugin.config() - function. Setting this value will imply Plugin.config() + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is set. - Lazy uses several heuristics to determine the plugin’s - MAIN module automatically based on the plugin’s name. See - also opts. To use the default implementation without opts - set config to true. + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). main string? You can specify the main module to use for config() and opts(), in case it can not be determined automatically. @@ -316,7 +318,12 @@ SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. false or a list of build See Building for more information. commands - --------------------------------------------------------------------------------------------------- + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* @@ -1241,6 +1248,8 @@ BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* >lua { "nvim-lua/plenary.nvim", lazy = true } < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. - Only use `dependencies` if a plugin needs the dep to be installed **AND** loaded. Lua plugins/libraries are automatically loaded when they are `require()`d, so they don’t need to be in `dependencies`. From 53661bb38c2b9b9eab84355b549c07b94f334d01 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 5 Jul 2024 16:00:54 +0200 Subject: [PATCH 688/815] ci: update --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + .github/dependabot.yml | 9 +-- .github/workflows/ci.yml | 99 +++------------------------ .github/workflows/community.yml | 30 ++++++++ .github/workflows/docs.yml | 20 ++++++ .github/workflows/labeler.yml | 8 +++ .github/workflows/pr.yml | 18 +++++ .github/workflows/stale.yml | 10 +++ .gitignore | 13 ++-- tests/run => scripts/test | 2 +- 10 files changed, 105 insertions(+), 105 deletions(-) create mode 100644 .github/workflows/community.yml create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/labeler.yml create mode 100644 .github/workflows/pr.yml create mode 100644 .github/workflows/stale.yml rename tests/run => scripts/test (78%) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 4a77601..7f1e1ed 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -75,6 +75,7 @@ body: -- install plugins local plugins = { "folke/tokyonight.nvim", + -- add any other plugins here } require("lazy").setup(plugins, { diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0d08e26..5ace460 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,11 +1,6 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file - version: 2 updates: - - package-ecosystem: "github-actions" # See documentation for possible values - directory: "/" # Location of package manifests + - package-ecosystem: "github-actions" + directory: "/" schedule: interval: "weekly" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a2ed40..b88337a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,96 +1,15 @@ name: CI + on: push: + branches: [main, master] pull_request: jobs: - tests: - strategy: - matrix: - # os: [ubuntu-latest, windows-latest] - os: [ubuntu-latest] - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - name: Install Neovim - shell: bash - run: | - mkdir -p /tmp/nvim - wget -q https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage -O /tmp/nvim/nvim.appimage - cd /tmp/nvim - chmod a+x ./nvim.appimage - ./nvim.appimage --appimage-extract - echo "/tmp/nvim/squashfs-root/usr/bin/" >> $GITHUB_PATH - - name: Run Tests - run: | - nvim --version - [ ! -d tests ] && exit 0 - ./tests/run - docs: - runs-on: ubuntu-latest - if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'folke' }} - needs: tests - env: - GH_TOKEN: ${{ github.token }} - steps: - - uses: actions/checkout@v4 - with: - ref: docs - - name: Generate Docs - shell: bash - run: gh workflow run "Deploy to Github Pages" --ref docs - community: - runs-on: ubuntu-latest - if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'folke' }} - steps: - - uses: actions/checkout@v4 - - name: Install Neovim - shell: bash - run: | - mkdir -p /tmp/nvim - wget -q https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage -O /tmp/nvim/nvim.appimage - cd /tmp/nvim - chmod a+x ./nvim.appimage - ./nvim.appimage --appimage-extract - echo "/tmp/nvim/squashfs-root/usr/bin/" >> $GITHUB_PATH - - name: Rockspec Build - id: rockspec-build - uses: actions/cache@v4 - with: - path: build - key: rockspec-build - - name: Generate Rockspec - if: steps.rockspec-build.cache-hit != 'true' - run: | - nvim -l lua/lazy/build.lua - - name: Push changes - uses: stefanzweifel/git-auto-commit-action@v5 - with: - commit_message: "chore(build): auto-generate rockspec mappings" - commit_user_name: "github-actions[bot]" - commit_user_email: "github-actions[bot]@users.noreply.github.com" - commit_author: "github-actions[bot] " - release: - name: release - if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'folke' }} - needs: - - tests - - docs - runs-on: ubuntu-latest - steps: - - uses: googleapis/release-please-action@v4 - id: release - with: - config-file: .github/release-please-config.json - manifest-file: .github/.release-please-manifest.json - - uses: actions/checkout@v4 - - name: tag stable versions - if: ${{ steps.release.outputs.release_created }} - run: | - git config user.name github-actions[bot] - git config user.email github-actions[bot]@users.noreply.github.com - git remote add gh-token "https://${{ secrets.GITHUB_TOKEN }}@github.com/google-github-actions/release-please-action.git" - git tag -d stable || true - git push origin :stable || true - git tag -a stable -m "Last Stable Release" - git push origin stable + ci: + uses: folke/github/.github/workflows/ci.yml@main + secrets: inherit + with: + plugin: lazy.nvim + repo: folke/lazy.nvim + tests: true diff --git a/.github/workflows/community.yml b/.github/workflows/community.yml new file mode 100644 index 0000000..85d3248 --- /dev/null +++ b/.github/workflows/community.yml @@ -0,0 +1,30 @@ +name: Community +on: + push: + branches: + - main + +jobs: + community: + runs-on: ubuntu-latest + if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'folke' }} + steps: + - uses: actions/checkout@v4 + - uses: folke/github/neovim@main + - name: Rockspec Build + id: rockspec-build + uses: actions/cache@v4 + with: + path: build + key: rockspec-build + - name: Generate Rockspec + if: steps.rockspec-build.cache-hit != 'true' + run: | + nvim -l lua/lazy/build.lua + - name: Push changes + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "chore(build): auto-generate rockspec mappings" + commit_user_name: "github-actions[bot]" + commit_user_email: "github-actions[bot]@users.noreply.github.com" + commit_author: "github-actions[bot] " diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..ee5e7c9 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,20 @@ +name: Docs +on: + push: + branches: + - main + +jobs: + docs: + runs-on: ubuntu-latest + if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'folke' }} + needs: tests + env: + GH_TOKEN: ${{ github.token }} + steps: + - uses: actions/checkout@v4 + with: + ref: docs + - name: Generate Docs + shell: bash + run: gh workflow run "Deploy to Github Pages" --ref docs diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml new file mode 100644 index 0000000..0908727 --- /dev/null +++ b/.github/workflows/labeler.yml @@ -0,0 +1,8 @@ +name: "PR Labeler" +on: + - pull_request_target + +jobs: + labeler: + uses: folke/github/.github/workflows/labeler.yml@main + secrets: inherit diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000..6d9df36 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,18 @@ +name: PR Title + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + - reopened + - ready_for_review + +permissions: + pull-requests: read + +jobs: + pr-title: + uses: folke/github/.github/workflows/pr.yml@main + secrets: inherit diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..a0c704b --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,10 @@ +name: Stale Issues & PRs + +on: + schedule: + - cron: "30 1 * * *" + +jobs: + ci: + uses: folke/github/.github/workflows/stale.yml@main + secrets: inherit diff --git a/.gitignore b/.gitignore index 7217496..2b0bb7a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,8 @@ -tt.* -.tests -doc/tags -debug -.repro -foo.* *.log -data +.repro +.tests build +debug +doc/tags +foo.* +tt.* diff --git a/tests/run b/scripts/test similarity index 78% rename from tests/run rename to scripts/test index f1399de..4baf621 100755 --- a/tests/run +++ b/scripts/test @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/env bash nvim -l tests/minit.lua --busted tests -o utfTerminal "$@" From 6186b3de3e1be15f3dc95fcf7c5ec121b69cbc52 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 5 Jul 2024 16:03:08 +0200 Subject: [PATCH 689/815] ci: add generated files to .styluaignore --- .styluaignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .styluaignore diff --git a/.styluaignore b/.styluaignore new file mode 100644 index 0000000..0ad920d --- /dev/null +++ b/.styluaignore @@ -0,0 +1 @@ +lua/lazy/community/_generated.lua From 61c7156b57191b8c90fb168dc22506b9482d52be Mon Sep 17 00:00:00 2001 From: folke Date: Fri, 5 Jul 2024 14:04:23 +0000 Subject: [PATCH 690/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 73bd0ae..89fb0a4 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 05 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during. Mostly useful - for setting vim.g.* configuration used by Vim plugins - startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From d0c00e697a8202dae764d2cc5d9392cf50639515 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 5 Jul 2024 16:04:28 +0200 Subject: [PATCH 691/815] ci: remove tests dep --- .github/workflows/docs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index ee5e7c9..4b0363f 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -8,7 +8,6 @@ jobs: docs: runs-on: ubuntu-latest if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'folke' }} - needs: tests env: GH_TOKEN: ${{ github.token }} steps: From 40e08f2b8a7ce27f20c339767ecdfa78e5250cc4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 Jul 2024 14:05:18 +0000 Subject: [PATCH 692/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 89fb0a4..73bd0ae 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 05 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during. Mostly useful + for setting vim.g.* configuration used by Vim plugins + startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 6ca23c15f64e88e3ba26be9795343c4c7f2ee851 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 5 Jul 2024 16:13:11 +0200 Subject: [PATCH 693/815] chore(main): release 11.10.1 (#1612) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index d58642f..e6cb8da 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.10.0" + ".": "11.10.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index a6ad34e..97a2b89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.10.1](https://github.com/folke/lazy.nvim/compare/v11.10.0...v11.10.1) (2024-07-05) + + +### Bug Fixes + +* **lockfile:** keep cond=false and enabed=false in lockfile. Fixes [#1535](https://github.com/folke/lazy.nvim/issues/1535). Fixes [#1606](https://github.com/folke/lazy.nvim/issues/1606) ([baac551](https://github.com/folke/lazy.nvim/commit/baac5517770abd6eee63d11cf4791ef5bf5702e8)) + ## [11.10.0](https://github.com/folke/lazy.nvim/compare/v11.9.2...v11.10.0) (2024-07-04) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 28e942c..3bcb5ae 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.10.0" -- x-release-please-version +M.version = "11.10.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 11e802dbaa5d33a3c49cae73708aa160c3601b6e Mon Sep 17 00:00:00 2001 From: folke Date: Fri, 5 Jul 2024 14:13:53 +0000 Subject: [PATCH 694/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 73bd0ae..89fb0a4 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 05 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during. Mostly useful - for setting vim.g.* configuration used by Vim plugins - startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 894cd193e9ffc05dcb75ff0093c1b72880d5d9c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 Jul 2024 14:13:57 +0000 Subject: [PATCH 695/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 89fb0a4..73bd0ae 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 05 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during. Mostly useful + for setting vim.g.* configuration used by Vim plugins + startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 538f060e42d60dedf058d478cc410c6b193bf188 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 5 Jul 2024 19:02:48 +0200 Subject: [PATCH 696/815] ci: update --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 - .github/ISSUE_TEMPLATE/config.yml | 5 +++++ .github/PULL_REQUEST_TEMPLATE.md | 12 ++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 7f1e1ed..4a77601 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -75,7 +75,6 @@ body: -- install plugins local plugins = { "folke/tokyonight.nvim", - -- add any other plugins here } require("lazy").setup(plugins, { diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..d6851ed --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Ask a question or start a discussion + url: https://github.com/folke/lazy.nvim/discussions + about: Use Github discussions instead diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..c064b8c --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,12 @@ +## What is this PR for? + + + +## Does this PR fix an existing issue? + + + From 94b6b6703129bb659220720515655d2eaf36cbc3 Mon Sep 17 00:00:00 2001 From: folke Date: Fri, 5 Jul 2024 17:03:29 +0000 Subject: [PATCH 697/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 73bd0ae..89fb0a4 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 05 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during. Mostly useful - for setting vim.g.* configuration used by Vim plugins - startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From d901d2166fef0304e360316e7a04316f11ab62d0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 Jul 2024 17:03:38 +0000 Subject: [PATCH 698/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 89fb0a4..73bd0ae 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 05 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during. Mostly useful + for setting vim.g.* configuration used by Vim plugins + startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From c3a9cec06b62c7fbd896644c13840f18fcc79e67 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 6 Jul 2024 11:45:24 +0200 Subject: [PATCH 699/815] ci: update --- .github/workflows/update.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/workflows/update.yml diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml new file mode 100644 index 0000000..2177a50 --- /dev/null +++ b/.github/workflows/update.yml @@ -0,0 +1,12 @@ +name: Update Repo + +on: + workflow_dispatch: + schedule: + # Run every hour + - cron: "0 * * * *" + +jobs: + ci: + uses: folke/github/.github/workflows/update.yml@main + secrets: inherit From e3154ff0b7055f1bcded818d52cb518cac899ee8 Mon Sep 17 00:00:00 2001 From: folke Date: Sat, 6 Jul 2024 09:48:26 +0000 Subject: [PATCH 700/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 73bd0ae..cb18dda 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 06 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during. Mostly useful - for setting vim.g.* configuration used by Vim plugins - startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From c060de160a3cebb658969852d843915bc73a11ce Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 15:00:16 +0200 Subject: [PATCH 701/815] chore(update): update repository (#1616) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Co-authored-by: folke <292349+folke@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index d6851ed..8dba2f4 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - - name: Ask a question or start a discussion + - name: Ask a question url: https://github.com/folke/lazy.nvim/discussions about: Use Github discussions instead From 16ccd54360651ad2b27ee0117365f7a33577ea3c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 6 Jul 2024 13:01:02 +0000 Subject: [PATCH 702/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index cb18dda..73bd0ae 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 06 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during. Mostly useful + for setting vim.g.* configuration used by Vim plugins + startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 49a35d3c8c7f9cfe6eede9d351953c8ef17fcd35 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 18:05:10 +0200 Subject: [PATCH 703/815] chore(update): update repository (#1618) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Co-authored-by: folke <292349+folke@users.noreply.github.com> --- .github/PULL_REQUEST_TEMPLATE.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index c064b8c..3f7c92e 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,12 +1,16 @@ -## What is this PR for? +## Description -## Does this PR fix an existing issue? +## Related Issue(s) +## Screenshots + + + From 1e7745a4a078b7e58ae673ca5a374e4439f443d1 Mon Sep 17 00:00:00 2001 From: folke Date: Sat, 6 Jul 2024 16:05:47 +0000 Subject: [PATCH 704/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 73bd0ae..cb18dda 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 06 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during. Mostly useful - for setting vim.g.* configuration used by Vim plugins - startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 0ff7e83c17c6eef181116954761ee8ed84db88a7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 6 Jul 2024 16:05:52 +0000 Subject: [PATCH 705/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index cb18dda..73bd0ae 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 06 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during. Mostly useful + for setting vim.g.* configuration used by Vim plugins + startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From e6035dc59bcd71c395b1a39f15e418acc94e789a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 6 Jul 2024 23:18:28 +0200 Subject: [PATCH 706/815] ci: update --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b88337a..60f92cf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,4 +12,3 @@ jobs: with: plugin: lazy.nvim repo: folke/lazy.nvim - tests: true From 23ea80b6a3230070989a730f6ba921a75d7d7057 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 6 Jul 2024 23:19:48 +0200 Subject: [PATCH 707/815] ci: update --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2b0bb7a..61ab828 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ build debug doc/tags foo.* +node_modules tt.* From 55b46b3993df75b015b8e294a8e5a244e8df415b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 6 Jul 2024 23:45:30 +0200 Subject: [PATCH 708/815] ci: update --- .gitignore | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 61ab828..771c835 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ *.log -.repro -.tests -build -debug -doc/tags +/.repro +/.tests +/build +/debug +/doc/tags foo.* node_modules tt.* From 933f0b596c7372daf534373ae9a11e98744b8636 Mon Sep 17 00:00:00 2001 From: folke Date: Sat, 6 Jul 2024 21:46:26 +0000 Subject: [PATCH 709/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 73bd0ae..cb18dda 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 06 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during. Mostly useful - for setting vim.g.* configuration used by Vim plugins - startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 81d2bfffdc8c84a40d25cae7fd4800178c19a138 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 7 Jul 2024 08:42:19 +0200 Subject: [PATCH 710/815] fix(git): only check for new commits for local plugins. Closes #1512 --- lua/lazy/manage/git.lua | 8 ++++++++ lua/lazy/manage/task/git.lua | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lua/lazy/manage/git.lua b/lua/lazy/manage/git.lua index a365824..201e4e7 100644 --- a/lua/lazy/manage/git.lua +++ b/lua/lazy/manage/git.lua @@ -148,6 +148,14 @@ function M.get_target(plugin) return { branch = branch, commit = M.get_commit(plugin.dir, branch, true) } end +---@param plugin LazyPlugin +---@return GitInfo? +function M.get_local_target(plugin) + local info = M.info(plugin.dir) + local branch = assert(info and info.branch or M.get_branch(plugin)) + return { branch = branch, commit = M.get_commit(plugin.dir, branch, true) } +end + function M.ref(repo, ...) local ref = table.concat({ ... }, "/") diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 774df16..8e0ef48 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -36,7 +36,7 @@ M.log = { table.insert(args, self.plugin._.updated.from .. ".." .. (self.plugin._.updated.to or "HEAD")) elseif opts.check then local info = assert(Git.info(self.plugin.dir)) - local target = assert(Git.get_target(self.plugin)) + local target = assert(self.plugin._.is_local and Git.get_local_target(self.plugin) or Git.get_target(self.plugin)) if not target.commit then for k, v in pairs(target) do error(k .. " '" .. v .. "' not found") From 23aeb224edf9c8da9e5613af0218f5a5380283d4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 7 Jul 2024 06:43:02 +0000 Subject: [PATCH 711/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index cb18dda..73bd0ae 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 06 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during. Mostly useful + for setting vim.g.* configuration used by Vim plugins + startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 89b264ac1d3c9752b22d4e61d16dc408a75d2a16 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 7 Jul 2024 08:44:37 +0200 Subject: [PATCH 712/815] chore(main): release 11.10.2 (#1621) :robot: I have created a release *beep* *boop* --- ## [11.10.2](https://github.com/folke/lazy.nvim/compare/v11.10.1...v11.10.2) (2024-07-07) ### Bug Fixes * **git:** only check for new commits for local plugins. Closes [#1512](https://github.com/folke/lazy.nvim/issues/1512) ([81d2bff](https://github.com/folke/lazy.nvim/commit/81d2bfffdc8c84a40d25cae7fd4800178c19a138)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index e6cb8da..9441643 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.10.1" + ".": "11.10.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 97a2b89..b265fe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.10.2](https://github.com/folke/lazy.nvim/compare/v11.10.1...v11.10.2) (2024-07-07) + + +### Bug Fixes + +* **git:** only check for new commits for local plugins. Closes [#1512](https://github.com/folke/lazy.nvim/issues/1512) ([81d2bff](https://github.com/folke/lazy.nvim/commit/81d2bfffdc8c84a40d25cae7fd4800178c19a138)) + ## [11.10.1](https://github.com/folke/lazy.nvim/compare/v11.10.0...v11.10.1) (2024-07-05) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 3bcb5ae..f1eff9c 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.10.1" -- x-release-please-version +M.version = "11.10.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 083f3dfb5e5ef7e53fccd0d7d71c32aae7d93a16 Mon Sep 17 00:00:00 2001 From: folke Date: Sun, 7 Jul 2024 06:45:23 +0000 Subject: [PATCH 713/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 73bd0ae..b3fad77 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 07 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during. Mostly useful - for setting vim.g.* configuration used by Vim plugins - startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 25026d23822bf95b1f7a1ad2a8541a190c8f7b30 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 7 Jul 2024 06:45:25 +0000 Subject: [PATCH 714/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b3fad77..73bd0ae 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 07 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during. Mostly useful + for setting vim.g.* configuration used by Vim plugins + startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From c771cf4928d1a1428ac7461658ab2916ed48adf5 Mon Sep 17 00:00:00 2001 From: folke Date: Sun, 7 Jul 2024 06:46:59 +0000 Subject: [PATCH 715/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 73bd0ae..b3fad77 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 07 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during. Mostly useful - for setting vim.g.* configuration used by Vim plugins - startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 72c0dc9462ab3bf1a68198afabc1eb4e2940d299 Mon Sep 17 00:00:00 2001 From: Andre Toerien Date: Sun, 7 Jul 2024 17:13:49 +0200 Subject: [PATCH 716/815] fix(git): local plugin fixes (#1624) ## Description As I described in https://github.com/folke/lazy.nvim/pull/1512#issuecomment-2212474372, this makes it so that local plugins will only show as needing updates if the local branch is behind the upstream branch. This is done by checking the output of the `git log` command, and only setting `plugin._.updates` if the output is not empty. This seems to solve my issue where local plugins with unpushed changes always show as needing updates, but if there's a easier/better way of doing it then please feel free to edit/close this. Or if you don't agree that the current behaviour is a bug, then that's also fine - it's not a big deal and I can easily just ignore the "updates available" notice. I also came across a minor issue where the plugin diff view (press `d`) compares the wrong commits for local plugins, because [lua/lazy/view/init.lua](https://github.com/folke/lazy.nvim/blob/c771cf4928d1a1428ac7461658ab2916ed48adf5/lua/lazy/view/init.lua#L268) always uses `get_target`. I fixed this by moving `get_local_target` into `get_target` - I think this is simpler and more straightforward than the alternative of adding a ternary everywhere `get_target` is called. This second bugfix is a very small change, so I've just included it here, but I'm happy to make a second PR if you'd like. ## Related Issue(s) Related PR: #1512 --- lua/lazy/manage/checker.lua | 4 +++- lua/lazy/manage/git.lua | 15 ++++++--------- lua/lazy/manage/task/git.lua | 30 +++++++++++++++++++++--------- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/lua/lazy/manage/checker.lua b/lua/lazy/manage/checker.lua index 8e03d9e..6efc5a7 100644 --- a/lua/lazy/manage/checker.lua +++ b/lua/lazy/manage/checker.lua @@ -35,7 +35,9 @@ end function M.fast_check(opts) opts = opts or {} for _, plugin in pairs(Config.plugins) do - if not plugin.pin and not plugin.dev and plugin._.installed then + -- don't check local plugins here, since we mark them as needing updates + -- only if local is behind upstream (if the git log task gives no output) + if plugin._.installed and not (plugin.pin or plugin._.is_local) then plugin._.updates = nil local info = Git.info(plugin.dir) local ok, target = pcall(Git.get_target, plugin) diff --git a/lua/lazy/manage/git.lua b/lua/lazy/manage/git.lua index 201e4e7..ef68cc7 100644 --- a/lua/lazy/manage/git.lua +++ b/lua/lazy/manage/git.lua @@ -116,6 +116,12 @@ end ---@param plugin LazyPlugin ---@return GitInfo? function M.get_target(plugin) + if plugin._.is_local then + local info = M.info(plugin.dir) + local branch = assert(info and info.branch or M.get_branch(plugin)) + return { branch = branch, commit = M.get_commit(plugin.dir, branch, true) } + end + local branch = assert(M.get_branch(plugin)) if plugin.commit then @@ -144,15 +150,6 @@ function M.get_target(plugin) } end end - ---@diagnostic disable-next-line: return-type-mismatch - return { branch = branch, commit = M.get_commit(plugin.dir, branch, true) } -end - ----@param plugin LazyPlugin ----@return GitInfo? -function M.get_local_target(plugin) - local info = M.info(plugin.dir) - local branch = assert(info and info.branch or M.get_branch(plugin)) return { branch = branch, commit = M.get_commit(plugin.dir, branch, true) } end diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 8e0ef48..9425fec 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -32,11 +32,13 @@ M.log = { "--no-show-signature", } + local info, target + if opts.updated then table.insert(args, self.plugin._.updated.from .. ".." .. (self.plugin._.updated.to or "HEAD")) elseif opts.check then - local info = assert(Git.info(self.plugin.dir)) - local target = assert(self.plugin._.is_local and Git.get_local_target(self.plugin) or Git.get_target(self.plugin)) + info = assert(Git.info(self.plugin.dir)) + target = assert(Git.get_target(self.plugin)) if not target.commit then for k, v in pairs(target) do error(k .. " '" .. v .. "' not found") @@ -44,15 +46,17 @@ M.log = { error("no target commit found") end assert(target.commit, self.plugin.name .. " " .. target.branch) - if Git.eq(info, target) then - if Config.options.checker.check_pinned then - local last_commit = Git.get_commit(self.plugin.dir, target.branch, true) - if not Git.eq(info, { commit = last_commit }) then - self.plugin._.outdated = true + if not self.plugin._.is_local then + if Git.eq(info, target) then + if Config.options.checker.check_pinned then + local last_commit = Git.get_commit(self.plugin.dir, target.branch, true) + if not Git.eq(info, { commit = last_commit }) then + self.plugin._.outdated = true + end end + else + self.plugin._.updates = { from = info, to = target } end - else - self.plugin._.updates = { from = info, to = target } end table.insert(args, info.commit .. ".." .. target.commit) else @@ -63,6 +67,14 @@ M.log = { args = args, cwd = self.plugin.dir, }) + + -- for local plugins, mark as needing updates only if local is + -- behind upstream, i.e. if git log gave no output + if opts.check and self.plugin._.is_local then + if not vim.tbl_isempty(self:get_log()) then + self.plugin._.updates = { from = info, to = target } + end + end end, } From 93c9a3f872153247cef14f095d2d037b7c93704f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 7 Jul 2024 15:14:44 +0000 Subject: [PATCH 717/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b3fad77..73bd0ae 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 07 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during. Mostly useful + for setting vim.g.* configuration used by Vim plugins + startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 436d09af7d3d9e1ff39dc2cf51be800a7ab45be9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 7 Jul 2024 15:15:37 +0000 Subject: [PATCH 718/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 73bd0ae..c2c9695 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -294,9 +294,9 @@ SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* -------------------------------------------------------------------------------------------------- Property Type Description ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during. Mostly useful - for setting vim.g.* configuration used by Vim plugins - startup + init fun(LazyPlugin) init functions are always executed during startup. Mostly + useful for setting vim.g.* configuration used by Vim + plugins startup opts table or opts should be a table (will be merged with parent fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should From a6daaf68a2805ac9180b835f09de5ca5d5cf8993 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 7 Jul 2024 21:25:12 +0200 Subject: [PATCH 719/815] chore(main): release 11.10.3 (#1625) :robot: I have created a release *beep* *boop* --- ## [11.10.3](https://github.com/folke/lazy.nvim/compare/v11.10.2...v11.10.3) (2024-07-07) ### Bug Fixes * **git:** local plugin fixes ([#1624](https://github.com/folke/lazy.nvim/issues/1624)) ([72c0dc9](https://github.com/folke/lazy.nvim/commit/72c0dc9462ab3bf1a68198afabc1eb4e2940d299)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 9441643..5d18bbe 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.10.2" + ".": "11.10.3" } diff --git a/CHANGELOG.md b/CHANGELOG.md index b265fe9..b09ee5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.10.3](https://github.com/folke/lazy.nvim/compare/v11.10.2...v11.10.3) (2024-07-07) + + +### Bug Fixes + +* **git:** local plugin fixes ([#1624](https://github.com/folke/lazy.nvim/issues/1624)) ([72c0dc9](https://github.com/folke/lazy.nvim/commit/72c0dc9462ab3bf1a68198afabc1eb4e2940d299)) + ## [11.10.2](https://github.com/folke/lazy.nvim/compare/v11.10.1...v11.10.2) (2024-07-07) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f1eff9c..083db1c 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.10.2" -- x-release-please-version +M.version = "11.10.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 44cd12fa2709a4de644b1d7c2773d5c59df07a66 Mon Sep 17 00:00:00 2001 From: folke Date: Sun, 7 Jul 2024 19:26:10 +0000 Subject: [PATCH 720/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c2c9695..b3fad77 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 07 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during startup. Mostly - useful for setting vim.g.* configuration used by Vim - plugins startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 2dfccd7b948beb26d8bcff7f9113a3a5c85cbc4a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 8 Jul 2024 07:28:02 +0200 Subject: [PATCH 721/815] fix(ui): don't treat suspended as headless. Closes #1626 --- lua/lazy/core/config.lua | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 083db1c..233b1fc 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -253,9 +253,10 @@ M.mapleader = nil ---@type string M.maplocalleader = nil -local headless = #vim.api.nvim_list_uis() == 0 +M.suspended = false + function M.headless() - return headless + return not M.suspended and #vim.api.nvim_list_uis() == 0 end ---@param opts? LazyConfig @@ -338,6 +339,12 @@ function M.setup(opts) end end, }) + + vim.api.nvim_create_autocmd({ "VimSuspend", "VimResume" }, { + callback = function(ev) + M.suspended = ev.event == "VimSuspend" + end, + }) end, }) end From 0002bfbd9ffba015f65955027799adba2634d220 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 8 Jul 2024 05:28:57 +0000 Subject: [PATCH 722/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index b3fad77..c2c9695 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 07 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during startup. Mostly + useful for setting vim.g.* configuration used by Vim + plugins startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From f0324defdd43be8aa14aaf3a794ff3d5581f36ba Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 8 Jul 2024 07:45:43 +0200 Subject: [PATCH 723/815] fix(rocks): try building anyway even when prerequisits have not been met. (will likely fail) --- lua/lazy/manage/task/fs.lua | 11 +++++-- lua/lazy/pkg/rockspec.lua | 57 +++++++++++++++++++++---------------- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/lua/lazy/manage/task/fs.lua b/lua/lazy/manage/task/fs.lua index 3401c29..41a18a8 100644 --- a/lua/lazy/manage/task/fs.lua +++ b/lua/lazy/manage/task/fs.lua @@ -21,16 +21,23 @@ M.clean = { skip = function(plugin) return plugin._.is_local end, - run = function(self) + ---@param opts? {rocks_only?:boolean} + run = function(self, opts) + opts = opts or {} local dir = self.plugin.dir:gsub("/+$", "") assert(dir:find(Config.options.root, 1, true) == 1, self.plugin.dir .. " should be under packpath!") - rm(dir) local rock_root = Config.options.rocks.root .. "/" .. self.plugin.name if vim.uv.fs_stat(rock_root) then rm(rock_root) end + if opts.rocks_only then + return + end + + rm(dir) + self.plugin._.installed = false end, } diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index e1d2c6e..19d580d 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -78,25 +78,23 @@ function M.check(opts) else ok = Health.have(M.python, opts) ok = Health.have(M.hererocks.bin("luarocks")) and ok - ok = Health.have( + Health.have( M.hererocks.bin("lua"), vim.tbl_extend("force", opts, { version = "-v", version_pattern = "5.1", }) - ) and ok + ) end else ok = Health.have("luarocks", opts) - ok = ( - Health.have( - { "lua5.1", "lua", "lua-5.1" }, - vim.tbl_extend("force", opts, { - version = "-v", - version_pattern = "5.1", - }) - ) - ) and ok + Health.have( + { "lua5.1", "lua", "lua-5.1" }, + vim.tbl_extend("force", opts, { + version = "-v", + version_pattern = "5.1", + }) + ) end return ok end @@ -104,17 +102,17 @@ end ---@async ---@param task LazyTask function M.build(task) - if - not M.check({ - error = function(msg) - task:error(msg:gsub("[{}]", "`")) - end, - warn = function(msg) - task:warn(msg) - end, - ok = function(msg) end, - }) - then + M.check({ + error = function(msg) + task:error(msg:gsub("[{}]", "`")) + end, + warn = function(msg) + task:warn(msg) + end, + ok = function(msg) end, + }) + + if task:has_warnings() then task:log({ "", "This plugin requires `luarocks`. Try one of the following:", @@ -123,7 +121,11 @@ function M.build(task) or " - enable `hererocks` with `opts.rocks.hererocks = true`", " - disable `luarocks` support completely with `opts.rocks.enabled = false`", }) - return + task:warn("\nWill try building anyway, but will likely fail...") + + task:warn("\n" .. string.rep("-", 80) .. "\n") + + task:set_level(vim.log.levels.WARN) end if task.plugin.name == "hererocks" then @@ -187,11 +189,13 @@ function M.build(task) return end - task:warn("Failed installing " .. rockspec.package .. " with `luarocks`.\nTrying to build from source.") + task:warn("Failed installing " .. rockspec.package .. " with `luarocks`.") + task:warn("\n" .. string.rep("-", 80) .. "\n") + task:warn("Trying to build from source.") -- install failed, so try building from source task:set_level() -- reset level - task:spawn(luarocks, { + ok = task:spawn(luarocks, { args = { "--tree", root, @@ -206,6 +210,9 @@ function M.build(task) cwd = task.plugin.dir, env = env, }) + if not ok then + require("lazy.manage.task.fs").clean.run(task, { rocks_only = true }) + end end ---@param rockspec RockSpec From a4c473cc2d30717a211f1bef4f99b0b6f9914efa Mon Sep 17 00:00:00 2001 From: folke Date: Mon, 8 Jul 2024 05:46:33 +0000 Subject: [PATCH 724/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c2c9695..476bdf7 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 08 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during startup. Mostly - useful for setting vim.g.* configuration used by Vim - plugins startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From f918318d21956b0874a65ab35ce3d94d9057aabf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 07:52:50 +0200 Subject: [PATCH 725/815] chore(main): release 11.10.4 (#1628) :robot: I have created a release *beep* *boop* --- ## [11.10.4](https://github.com/folke/lazy.nvim/compare/v11.10.3...v11.10.4) (2024-07-08) ### Bug Fixes * **rocks:** try building anyway even when prerequisits have not been met. (will likely fail) ([f0324de](https://github.com/folke/lazy.nvim/commit/f0324defdd43be8aa14aaf3a794ff3d5581f36ba)) * **ui:** don't treat suspended as headless. Closes [#1626](https://github.com/folke/lazy.nvim/issues/1626) ([2dfccd7](https://github.com/folke/lazy.nvim/commit/2dfccd7b948beb26d8bcff7f9113a3a5c85cbc4a)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 5d18bbe..a2f63d1 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.10.3" + ".": "11.10.4" } diff --git a/CHANGELOG.md b/CHANGELOG.md index b09ee5d..3ed551f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [11.10.4](https://github.com/folke/lazy.nvim/compare/v11.10.3...v11.10.4) (2024-07-08) + + +### Bug Fixes + +* **rocks:** try building anyway even when prerequisits have not been met. (will likely fail) ([f0324de](https://github.com/folke/lazy.nvim/commit/f0324defdd43be8aa14aaf3a794ff3d5581f36ba)) +* **ui:** don't treat suspended as headless. Closes [#1626](https://github.com/folke/lazy.nvim/issues/1626) ([2dfccd7](https://github.com/folke/lazy.nvim/commit/2dfccd7b948beb26d8bcff7f9113a3a5c85cbc4a)) + ## [11.10.3](https://github.com/folke/lazy.nvim/compare/v11.10.2...v11.10.3) (2024-07-07) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 233b1fc..c50b9c5 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.10.3" -- x-release-please-version +M.version = "11.10.4" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 1870238cf9c579c5d7eb8ea8b296f10b81978d34 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 8 Jul 2024 05:53:40 +0000 Subject: [PATCH 726/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 476bdf7..c2c9695 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 08 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during startup. Mostly + useful for setting vim.g.* configuration used by Vim + plugins startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From fadebdc76b71a1d3658a88a025c6c8fb4749e0f8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 9 Jul 2024 15:02:18 +0200 Subject: [PATCH 727/815] fix(minit): add tests to package.path when running busted (helpers.lua etc) --- lua/lazy/minit.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua index 838ac36..6300730 100644 --- a/lua/lazy/minit.lua +++ b/lua/lazy/minit.lua @@ -99,6 +99,7 @@ function M.busted.run() if not require("lazy.core.config").headless() then return vim.notify("busted can only run in headless mode. Please run with `nvim -l`", vim.log.levels.WARN) end + package.path = package.path .. ";" .. vim.uv.cwd() .. "/tests/?.lua" -- run busted return pcall(require("busted.runner"), { standalone = false, From 159036c5762a97246689299e61311fc88523a8fa Mon Sep 17 00:00:00 2001 From: folke Date: Tue, 9 Jul 2024 13:03:11 +0000 Subject: [PATCH 728/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 ++------------------------------------------- 1 file changed, 46 insertions(+), 1352 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c2c9695..f2ef56a 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,130 +1,61 @@ -*lazy.nvim.txt* A modern plugin manager for Neovim +*lazy.nvim.txt* For Neovim Last change: 2024 July 09 ============================================================================== Table of Contents *lazy.nvim-table-of-contents* -1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| - - 11.x |lazy.nvim-📰-what’s-new?-11.x| -2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| - - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| - - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| -3. 🛠️ Installation |lazy.nvim-🛠️-installation| - - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| - - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| -4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| - - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| - - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| - - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| - - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| - - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| - - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| - - Examples |lazy.nvim-🔌-plugin-spec-examples| - - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| - - Versioning |lazy.nvim-🔌-plugin-spec-versioning| -5. 📦 Packages |lazy.nvim-📦-packages| - - Lazy |lazy.nvim-📦-packages-lazy| - - Rockspec |lazy.nvim-📦-packages-rockspec| - - Packspec |lazy.nvim-📦-packages-packspec| -6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| - - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| -7. 🚀 Usage |lazy.nvim-🚀-usage| - - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| - - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| - - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| - - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| - - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| - - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| - - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| - - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| -8. 🔥 Developers |lazy.nvim-🔥-developers| - - Best Practices |lazy.nvim-🔥-developers-best-practices| - - Building |lazy.nvim-🔥-developers-building| - - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| -9. Links |lazy.nvim-links| - -============================================================================== -1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* + - Features |lazy.nvim-features| + - Requirements |lazy.nvim-requirements| + - Getting Started |lazy.nvim-getting-started| +1. Links |lazy.nvim-links| +Install +· +Configure +· +Docs + + + + + + + + + + + + + + -11.X *lazy.nvim-📰-what’s-new?-11.x* - -- **New Website**: There’s a whole new website with a fresh look and improved - documentation. Check it out at . The GitHub `README.md` - has been updated to point to the new website. The `vimdoc` contains all the - information that is available on the website. -- **Spec Resolution & Merging**: the code that resolves a final spec from a - plugin’s fragments has been rewritten. This should be a tiny bit faster, but - more importantly, fixes some issues and is easier to maintain. -- Packages can now specify their dependencies - and configuration using one of: - - **Lazy**: `lazy.lua` file - - **Rockspec**: luarocks `*-scm-1.rockspec` file - - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - Related _lazy.nvim_ options: - >lua - { - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", -- will only be used when rocks.enabled is true - "packspec", - }, - }, - rocks = { - enabled = true, - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - } - < -- Installing neorg is now as simple as: - >lua - { "nvim-neorg/neorg", opts = {} } - < -- Packages are not limited to just Neovim plugins. You can install any - **luarocks** package, like: - >lua - { "https://github.com/lubyk/yaml" } - < - Luarocks packages without a `/lua` directory are never lazy-loaded, since - it’s just a library. -- `build` functions or `*.lua` build files (like `build.lua`) now run - asynchronously. You can use `coroutine.yield(status_msg)` to show progress. - Yielding will also schedule the next `resume` to run in the next tick, so you - can do long-running tasks without blocking Neovim. -============================================================================== -2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* +FEATURES *lazy.nvim-features* -- 📦 Manage all your Neovim plugins with a powerful UI -- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- 💾 Partial clones instead of shallow clones -- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- 💪 Async execution for improved performance -- 🛠️ No need to manually compile plugins -- 🧪 Correct sequencing of dependencies -- 📁 Configurable in multiple files -- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- 💻 Dev options and patterns for using local plugins -- 📊 Profiling tools to optimize performance -- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins -- 🔎 Automatically check for updates -- 📋 Commit, branch, tag, version, and full Semver support -- 📈 Statusline component to see the number of pending updates -- 🎨 Automatically lazy-loads colorschemes +- Manage all your Neovim plugins with a powerful UI +- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- Partial clones instead of shallow clones +- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- Async execution for improved performance +- No need to manually compile plugins +- Correct sequencing of dependencies +- Configurable in multiple files +- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- Dev options and patterns for using local plugins +- Profiling tools to optimize performance +- Lockfile `lazy-lock.json` to keep track of installed plugins +- Automatically check for updates +- Commit, branch, tag, version, and full Semver support +- Statusline component to see the number of pending updates +- Automatically lazy-loads colorschemes -⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* +REQUIREMENTS *lazy.nvim-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -133,1251 +64,14 @@ Table of Contents *lazy.nvim-table-of-contents* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -============================================================================== -3. 🛠️ Installation *lazy.nvim-🛠️-installation* - -There are multiple ways to install **lazy.nvim**. The **Structured Setup** is -the recommended way, but you can also use the **Single File Setup** if you -prefer to keep everything in your `init.lua`. - -Please refer to the Configuration section for an overview of -all available options. - - - - -STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* - ->lua - require("config.lazy") -< - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- import your plugins - { import = "plugins" }, - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< - -You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each -file should return a table with the plugins you want to install. - -For more info see Structuring Your Plugins - - -SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* - ->lua - -- Bootstrap lazy.nvim - local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end - end - vim.opt.rtp:prepend(lazypath) - - -- Make sure to setup `mapleader` and `maplocalleader` before - -- loading lazy.nvim so that mappings are correct. - -- This is also a good place to setup other settings (vim.opt) - vim.g.mapleader = " " - vim.g.maplocalleader = "\\" - - -- Setup lazy.nvim - require("lazy").setup({ - -- highlight-start - spec = { - -- add your plugins here - }, - -- highlight-end - -- Configure any other settings here. See the documentation for more details. - -- colorscheme that will be used when installing plugins. - install = { colorscheme = { "habamax" } }, - -- automatically check for plugin updates - checker = { enabled = true }, - }) -< +GETTING STARTED *lazy.nvim-getting-started* +Check the documentation website for more information. ============================================================================== -4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* - - -SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* - - ----------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------- - [1] string? Short plugin url. Will be expanded using - config.git.url_format. Can also be a url or dir. - - dir string? A directory pointing to a local plugin - - 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 - - dev boolean? When true, a local plugin directory will be used instead. See - config.dev - ----------------------------------------------------------------------------------- -A valid spec should define one of `[1]`, `dir` or `url`. - - -SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* - - -------------------------------------------------------------------------------------------------- - Property Type Description - -------------- ------------------------- --------------------------------------------------------- - dependencies LazySpec[] A list of plugin names or plugin specs that should be - loaded when the plugin loads. Dependencies are always - lazy-loaded unless specified otherwise. When specifying a - name, make sure the plugin spec has been defined - somewhere else. - - enabled boolean? or fun():boolean When false, or if the function returns false, then this - plugin will not be included in the spec - - cond boolean? or Behaves the same as enabled, but won’t uninstall the - fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable - some plugins in vscode, or firenvim for example. - - priority number? Only useful for start plugins (lazy=false) to force - loading certain plugins first. Default priority is 50. - It’s recommended to set this to a high number for - colorschemes. - -------------------------------------------------------------------------------------------------- - -SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* - - -------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ----------------------------- --------------------------------------------------------- - init fun(LazyPlugin) init functions are always executed during startup. Mostly - useful for setting vim.g.* configuration used by Vim - plugins startup - - opts table or opts should be a table (will be merged with parent - fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should - change a table. The table will be passed to the - Plugin.config() function. Setting this value will imply - Plugin.config() - - config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default - or true implementation will automatically run - require(MAIN).setup(opts) if opts or config = true is - set. Lazy uses several heuristics to determine the - plugin’s MAIN module automatically based on the plugin’s - name. (opts is the recommended way to configure plugins). - - main string? You can specify the main module to use for config() and - opts(), in case it can not be determined automatically. - See config() - - build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. - false or a list of build See Building for more information. - commands - -------------------------------------------------------------------------------------------------- -Always use `opts` instead of `config` when possible. `config` is almost never -needed. - - - - -SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* - - -------------------------------------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------------------------------------------------------------- ---------------------------------------- - 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 - - event string? or string[] or Lazy-load on event. Events can be - fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern - {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua - - cmd string? or string[] or Lazy-load on command - fun(self:LazyPlugin, cmd:string[]):string[] - - ft string? or string[] or Lazy-load on filetype - fun(self:LazyPlugin, ft:string[]):string[] - - keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping - fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] - -------------------------------------------------------------------------------------------------------------------- -Refer to the Lazy Loading <./lazy_loading.md> section for more information. - - -SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* - - ------------------------------------------------------------------------------ - Property Type Description - ------------ -------------------- -------------------------------------------- - branch string? Branch of the repository - - tag string? Tag of the repository - - commit string? Commit of the repository - - version string? or false to Version to use from the repository. Full - override the default Semver ranges are supported - - pin boolean? When true, this plugin will not be included - in updates - - submodules boolean? When false, git submodules will not be - fetched. Defaults to true - ------------------------------------------------------------------------------ -Refer to the Versioning <./versioning.md> section for more information. - - -SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* - - ---------------------------------------------------------------------------------------- - Property Type Description - ---------- ---------- ------------------------------------------------------------------ - optional boolean? When a spec is tagged optional, it will only be included in the - final spec, when the same plugin has been specified at least once - somewhere else without optional. This is mainly useful for Neovim - distros, to allow setting options on plugins that may/may not be - part of the user’s plugins. - - specs LazySpec A list of plugin specs defined in the scope of the plugin. This is - mainly useful for Neovim distros, to allow setting options on - plugins that may/may not be part of the user’s plugins. When the - plugin is disabled, none of the scoped specs will be included in - the final spec. Similar to dependencies without the automatic - loading of the specs. - - module false? Do not automatically load this Lua module when it’s required - somewhere - - import string? Import the given spec module. - ---------------------------------------------------------------------------------------- - -EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* - ->lua - return { - -- the colorscheme should be available when starting Neovim - { - "folke/tokyonight.nvim", - lazy = false, -- make sure we load this during startup if it is your main colorscheme - priority = 1000, -- make sure to load this before all the other start plugins - config = function() - -- load the colorscheme here - vim.cmd([[colorscheme tokyonight]]) - end, - }, - - -- I have a separate config.mappings file where I require which-key. - -- With lazy the plugin will be automatically loaded when it is required somewhere - { "folke/which-key.nvim", lazy = true }, - - { - "nvim-neorg/neorg", - -- lazy-load on filetype - ft = "norg", - -- options for neorg. This will automatically call `require("neorg").setup(opts)` - opts = { - load = { - ["core.defaults"] = {}, - }, - }, - }, - - { - "dstein64/vim-startuptime", - -- lazy-load on a command - cmd = "StartupTime", - -- init is called during startup. Configuration for vim plugins typically should be set in an init function - init = function() - vim.g.startuptime_tries = 10 - end, - }, - - { - "hrsh7th/nvim-cmp", - -- load cmp on InsertEnter - event = "InsertEnter", - -- these dependencies will only be loaded when cmp loads - -- dependencies are always lazy-loaded unless specified otherwise - dependencies = { - "hrsh7th/cmp-nvim-lsp", - "hrsh7th/cmp-buffer", - }, - config = function() - -- ... - end, - }, - - -- if some code requires a module from an unloaded plugin, it will be automatically loaded. - -- So for api plugins like devicons, we can always set lazy=true - { "nvim-tree/nvim-web-devicons", lazy = true }, - - -- you can use the VeryLazy event for things that can - -- load later and are not important for the initial UI - { "stevearc/dressing.nvim", event = "VeryLazy" }, - - { - "Wansmer/treesj", - keys = { - { "J", "TSJToggle", desc = "Join Toggle" }, - }, - opts = { use_default_keymaps = false, max_join_length = 150 }, - }, - - { - "monaqa/dial.nvim", - -- lazy-load on keys - -- mode is `n` by default. For more advanced options, check the section on key mappings - keys = { "", { "", mode = "n" } }, - }, - - -- local plugins need to be explicitly configured with dir - { dir = "~/projects/secret.nvim" }, - - -- you can use a custom url to fetch a plugin - { url = "git@github.com:folke/noice.nvim.git" }, - - -- local plugins can also be configured with the dev option. - -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub - -- With the dev option, you can easily switch between the local and installed version of a plugin - { "folke/noice.nvim", dev = true }, - } -< - - -LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* - -**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have -a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of -plugin `A`, then plugin `A` will be loaded on demand as expected. - - -Additionally, you can also lazy-load on **events**, **commands**, **file -types** and **key mappings**. - -Plugins will be lazy-loaded when one of the following is `true`: - -- The plugin only exists as a dependency in your spec -- It has an `event`, `cmd`, `ft` or `keys` key -- `config.defaults.lazy == true` - - -🌈 COLORSCHEMES ~ - -Colorscheme plugins can be configured with `lazy=true`. The plugin will -automagically load when doing `colorscheme foobar`. - - - -⌨️ LAZY KEY MAPPINGS ~ - -The `keys` property can be a `string` or `string[]` for simple normal-mode -mappings, or it can be a `LazyKeysSpec` table with the following key-value -pairs: - -- **[1]**: (`string`) lhs **(required)** -- **[2]**: (`string|fun()`) rhs **(optional)** -- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** -- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** -- any other option valid for `vim.keymap.set` - -Key mappings will load the plugin the first time they get executed. - -When `[2]` is `nil`, then the real mapping has to be created by the `config()` -function. - ->lua - -- Example for neo-tree.nvim - { - "nvim-neo-tree/neo-tree.nvim", - keys = { - { "ft", "Neotree toggle", desc = "NeoTree" }, - }, - config = function() - require("neo-tree").setup() - end, - } -< - - -VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* - -If you want to install a specific revision of a plugin, you can use `commit`, -`tag`, `branch`, `version`. - -The `version` property supports Semver ranges. - - - -EXAMPLES ~ - -- `*`: latest stable version (this excludes pre-release versions) -- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. -- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. -- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. -- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. -- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. -- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. -- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc - - -============================================================================== -5. 📦 Packages *lazy.nvim-📦-packages* - -**lazy.nvim** supports three ways for plugins to define their dependencies and -configuration. - -- **Lazy**: `lazy.lua` file -- **Rockspec**: luarocks `*-scm-1.rockspec` file -- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) - -You can enable/disable package sources with `config.pkg.sources` -. The order of sources is important, as the first source that -finds a package will be used. - - - -LAZY *lazy.nvim-📦-packages-lazy* - -Using a `lazy.lua` file is the recommended way to define your plugin -dependencies and configuration. Syntax is the same as any plugin spec. - - -ROCKSPEC *lazy.nvim-📦-packages-rockspec* - -When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically -build the rock and its dependencies. - -A **rockspec** will only be used if one of the following is true: - -- the package does not have a `/lua` directory -- the package has a complex build step -- the package has dependencies (excluding `lua`) - - -PACKSPEC *lazy.nvim-📦-packages-packspec* - -Supports the pkg.json - format, with -a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They -will be added to the plugin’s spec. - - -============================================================================== -6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* - -**lazy.nvim** comes with the following defaults: - ->lua - { - root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed - defaults = { - -- Set this to `true` to have all your plugins lazy-loaded by default. - -- Only do this if you know what you are doing, as it can lead to unexpected behavior. - lazy = false, -- should plugins be lazy-loaded? - -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, - -- have outdated releases, which may break your Neovim install. - version = nil, -- always use the latest git commit - -- version = "*", -- try installing the latest stable version for plugins that support semver - -- default `cond` you can use to globally disable a lot of plugins - -- when running inside vscode for example - cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil - }, - -- leave nil when passing the spec as the first argument to setup() - spec = nil, ---@type LazySpec - local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. - lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. - ---@type number? limit the maximum amount of concurrent tasks - concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, - git = { - -- defaults for the `Lazy log` command - -- log = { "--since=3 days ago" }, -- show commits from the last 3 days - log = { "-8" }, -- show the last 8 commits - timeout = 120, -- kill processes that take more than 2 minutes - url_format = "https://github.com/%s.git", - -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, - -- then set the below to false. This should work, but is NOT supported and will - -- increase downloads a lot. - filter = true, - }, - pkg = { - enabled = true, - cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources - -- the first package source that is found for a plugin will be used. - sources = { - "lazy", - "rockspec", - "packspec", - }, - }, - rocks = { - root = vim.fn.stdpath("data") .. "/lazy-rocks", - server = "https://nvim-neorocks.github.io/rocks-binaries/", - }, - dev = { - ---@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"} - fallback = false, -- Fallback to git when local plugin doesn't exist - }, - install = { - -- install missing plugins on startup. This doesn't increase startup time. - missing = true, - -- try to load one of these colorschemes when starting an installation during startup - colorscheme = { "habamax" }, - }, - ui = { - -- a number <1 is a percentage., >1 is a fixed size - size = { width = 0.8, height = 0.8 }, - wrap = true, -- wrap the lines in the ui - -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. - border = "none", - -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. - backdrop = 60, - title = nil, ---@type string only works when border is not "none" - title_pos = "center", ---@type "center" | "left" | "right" - -- Show pills on top of the Lazy window - pills = true, ---@type boolean - icons = { - cmd = " ", - config = "", - event = " ", - favorite = " ", - ft = " ", - init = " ", - import = " ", - keys = " ", - lazy = "󰒲 ", - loaded = "●", - not_loaded = "○", - plugin = " ", - runtime = " ", - require = "󰢱 ", - source = " ", - start = " ", - task = "✔ ", - list = { - "●", - "➜", - "★", - "‒", - }, - }, - -- leave nil, to automatically select a browser depending on your OS. - -- If you want to use a specific browser, you can define it here - browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events - custom_keys = { - -- You can define custom key maps here. If present, the description will - -- be shown in the help menu. - -- To disable one of the defaults, set it to false. - - ["l"] = { - function(plugin) - require("lazy.util").float_term({ "lazygit", "log" }, { - cwd = plugin.dir, - }) - end, - desc = "Open lazygit log", - }, - - ["t"] = { - function(plugin) - require("lazy.util").float_term(nil, { - cwd = plugin.dir, - }) - end, - desc = "Open terminal in plugin dir", - }, - }, - }, - diff = { - -- diff command can be one of: - -- * browser: opens the github compare view. Note that this is always mapped to as well, - -- so you can have a different command for diff - -- * git: will run git diff and open a buffer with filetype git - -- * terminal_git: will open a pseudo terminal with git diff - -- * diffview.nvim: will open Diffview to show the diff - cmd = "git", - }, - checker = { - -- automatically check for plugin updates - enabled = false, - concurrency = nil, ---@type number? set to 1 to check for updates very slowly - notify = true, -- get a notification when new updates are found - frequency = 3600, -- check for updates every hour - check_pinned = false, -- check for pinned packages that can't be updated - }, - change_detection = { - -- automatically check for config file changes and reload the ui - enabled = true, - notify = true, -- get a notification when changes are found - }, - performance = { - cache = { - enabled = true, - }, - reset_packpath = true, -- reset the package path to improve startup time - rtp = { - reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory - ---@type string[] - paths = {}, -- add any custom paths here that you want to includes in the rtp - ---@type string[] list any plugins you want to disable here - disabled_plugins = { - -- "gzip", - -- "matchit", - -- "matchparen", - -- "netrwPlugin", - -- "tarPlugin", - -- "tohtml", - -- "tutor", - -- "zipPlugin", - }, - }, - }, - -- lazy can generate helptags from the headings in markdown readme files, - -- so :help works even for plugins that don't have vim docs. - -- when the readme opens with :help it will be correctly displayed as markdown - readme = { - enabled = true, - root = vim.fn.stdpath("state") .. "/lazy/readme", - files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs - skip_if_doc_exists = true, - }, - state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things - -- Enable profiling of lazy.nvim. This will add some overhead, - -- so only enable this when you are debugging lazy.nvim - profiling = { - -- Enables extra stats on the debug tab related to the loader cache. - -- Additionally gathers stats about all package.loaders - loader = false, - -- Track each new require in the Lazy profiling tab - require = false, - }, - } -< - -If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ - ->lua - { - ui = { - icons = { - cmd = "⌘", - config = "🛠", - event = "📅", - ft = "📂", - init = "⚙", - keys = "🗝", - plugin = "🔌", - runtime = "💻", - require = "🌙", - source = "📄", - start = "🚀", - task = "📌", - lazy = "💤 ", - }, - }, - } -< - - -🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* - - ----------------------------------------------------------------------- - Highlight Group Default Group Description - ----------------------- ----------------------- ----------------------- - LazyButton CursorLine - - LazyButtonActive Visual - - LazyComment Comment - - LazyCommit @variable.builtin commit ref - - LazyCommitIssue Number - - LazyCommitScope Italic conventional commit - scope - - LazyCommitType Title conventional commit - type - - LazyDimmed Conceal property - - LazyDir @markup.link directory - - LazyH1 IncSearch home button - - LazyH2 Bold titles - - LazyLocal Constant - - LazyNoCond DiagnosticWarn unloaded icon for a - plugin where cond() was - false - - LazyNormal NormalFloat - - LazyProgressDone Constant progress bar done - - LazyProgressTodo LineNr progress bar todo - - LazyProp Conceal property - - LazyReasonCmd Operator - - LazyReasonEvent Constant - - LazyReasonFt Character - - LazyReasonImport Identifier - - LazyReasonKeys Statement - - LazyReasonPlugin Special - - LazyReasonRequire @variable.parameter - - LazyReasonRuntime @macro - - LazyReasonSource Character - - LazyReasonStart @variable.member - - LazySpecial @punctuation.special - - LazyTaskError ErrorMsg task errors - - LazyTaskOutput MsgArea task output - - LazyUrl @markup.link url - - LazyValue @string value of a property - ----------------------------------------------------------------------- - -============================================================================== -7. 🚀 Usage *lazy.nvim-🚀-usage* - - -▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* - -**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading -completely (`vim.go.loadplugins = false`). It takes over the complete startup -sequence for more flexibility and better performance. - -In practice this means that step 10 of |Neovim Initialization| is done by Lazy: - -1. All the plugins’ `init()` functions are executed -2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) -3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) -4. All `/after/plugin` files are sourced (this includes `/after` from plugins) - -Files from runtime directories are always sourced in alphabetical order. - - -🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* - -Plugins are managed with the `:Lazy` command. Open the help with `` to see -all the key mappings. - -You can press `` on a plugin to show its details. Most properties can be -hovered with `` to open links, help files, readmes, git commits and git -issues. - -Lazy can automatically check for updates in the background. This feature can be -enabled with `config.checker.enabled = true`. - -Any operation can be started from the UI, with a sub command or an API -function: - - ---------------------------------------------------------------------------------- - Command Lua Description - ------------------------- -------------------------------- ----------------------- - :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin - - :Lazy check [plugins] require("lazy").check(opts?) Check for updates and - show the log (git - fetch) - - :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are - no longer needed - - :Lazy clear require("lazy").clear() Clear finished tasks - - :Lazy debug require("lazy").debug() Show debug information - - :Lazy health require("lazy").health() Run :checkhealth lazy - - :Lazy help require("lazy").help() Toggle this help page - - :Lazy home require("lazy").home() Go back to plugin list - - :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins - - :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has - not been loaded yet. - Similar to :packadd. - Like - :Lazy load foo.nvim. - Use :Lazy! load to skip - cond checks. - - :Lazy log [plugins] require("lazy").log(opts?) Show recent updates - - :Lazy profile require("lazy").profile() Show detailed profiling - - :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin - (experimental!!) - - :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to - the state in the - lockfile. For a single - plugin: restore it to - the state in the - lockfile or to a given - commit under the cursor - - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update - - :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This - will also update the - lockfile - ---------------------------------------------------------------------------------- -Any command can have a **bang** to make the command wait till it finished. For -example, if you want to sync lazy from the cmdline, you can use: - ->shell - nvim --headless "+Lazy! sync" +qa -< - -`opts` is a table with the following key-values: - -- **wait**: when true, then the call will wait till the operation completed -- **show**: when false, the UI will not be shown -- **plugins**: a list of plugin names to run the operation on -- **concurrency**: limit the `number` of concurrently running tasks - -Stats API (`require("lazy").stats()`): - ->lua - { - -- startuptime in milliseconds till UIEnter - startuptime = 0, - -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) - -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher - -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. - real_cputime = false, - count = 0, -- total number of plugins - loaded = 0, -- number of loaded plugins - ---@type table - times = {}, - } -< - -**lazy.nvim** provides a statusline component that you can use to show the -number of pending updates. Make sure to enable `config.checker.enabled = true` -to make this work. - -Example of configuring lualine.nvim ~ - ->lua - require("lualine").setup({ - sections = { - lualine_x = { - { - require("lazy.status").updates, - cond = require("lazy.status").has_updates, - color = { fg = "#ff9e64" }, - }, - }, - }, - }) -< - - -📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* - -The following user events will be triggered: - -- **LazyDone**: when lazy has finished starting up and loaded your config -- **LazySync**: after running sync -- **LazyInstall**: after an install -- **LazyUpdate**: after an update -- **LazyClean**: after a clean -- **LazyCheck**: after checking for updates -- **LazyLog**: after running log -- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. -- **LazySyncPre**: before running sync -- **LazyInstallPre**: before an install -- **LazyUpdatePre**: before an update -- **LazyCleanPre**: before a clean -- **LazyCheckPre**: before checking for updates -- **LazyLogPre**: before running log -- **LazyReload**: triggered by change detection after reloading plugin specs -- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands -- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. - Useful to update the startuptime on your dashboard. - - -❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* - -To uninstall **lazy.nvim**, you need to remove the following files and -directories: - -- **data**: `~/.local/share/nvim/lazy` -- **state**: `~/.local/state/nvim/lazy` -- **lockfile**: `~/.config/nvim/lazy-lock.json` - - - Paths can differ if you changed `XDG` environment variables. - -🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* - -After every **update**, the local lockfile (`lazy-lock.json`) is updated with -the installed revisions. It is recommended to have this file under version -control. - -If you use your Neovim config on multiple machines, using the lockfile, you can -ensure that the same version of every plugin is installed. - -If you are on another machine, you can do `:Lazy restore`, to update all your -plugins to the version from the lockfile. - - -📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* - - -PACKER.NVIM ~ - -- `setup` ➡️ `init` -- `requires` ➡️ `dependencies` -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` -- `lock` ➡️ `pin` -- `disable=true` ➡️ `enabled = false` -- `tag='*'` ➡️ `version="*"` -- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. -- `config` don’t support string type, use `fun(LazyPlugin)` instead. -- `module` is auto-loaded. No need to specify -- `keys` spec is |lazy.nvim-different| -- `rtp` can be accomplished with: - ->lua - config = function(plugin) - vim.opt.rtp:append(plugin.dir .. "/custom-rtp") - end -< - -With packer `wants`, `requires` and `after` can be used to manage dependencies. -With lazy, this isn’t needed for most of the Lua dependencies. They can be -installed just like normal plugins (even with `lazy=true`) and will be loaded -when other plugins need them. The `dependencies` key can be used to group those -required plugins with the one that requires them. The plugins which are added -as `dependencies` will always be lazy-loaded and loaded when the plugin is -loaded. - - -PAQ-NVIM ~ - -- `as` ➡️ `name` -- `opt` ➡️ `lazy` -- `run` ➡️ `build` - - -⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* - -Great care has been taken to make the startup code (`lazy.core`) as efficient -as possible. During startup, all Lua files used before `VimEnter` or -`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim - does. - -My config for example loads in about `11ms` with `93` plugins. I do a lot of -lazy-loading though :) - -**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you -improve performance. The profiling view shows you why and how long it took to -load your plugins. - - -🐛 DEBUG ~ - -See an overview of active lazy-loading handlers and what’s in the module -cache. - - -📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* - -Some users may want to split their plugin specs in multiple files. Instead of -passing a spec table to `setup()`, you can use a Lua module. The specs from the -**module** and any top-level **sub-modules** will be merged together in the -final spec, so it is not needed to add `require` calls in your main plugin file -to the other files. - -The benefits of using this approach: - -- Simple to **add** new plugin specs. Just create a new file in your plugins module. -- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. -- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. - -Example: - -- `~/.config/nvim/init.lua` - ->lua - require("lazy").setup("plugins") -< - -- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** - ->lua - return { - "folke/neodev.nvim", - "folke/which-key.nvim", - { "folke/neoconf.nvim", cmd = "Neoconf" }, - } -< - -- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec - -For a real-life example, you can check LazyVim - and more specifically: - -- lazyvim.plugins contains all the plugin specs that will be loaded - - -↩️ IMPORTING SPECS, CONFIG & OPTS - -As part of a spec, you can add `import` statements to import additional plugin -modules. Both of the `setup()` calls are equivalent: - ->lua - require("lazy").setup("plugins") - - -- Same as: - require("lazy").setup({{import = "plugins"}}) -< - -To import multiple modules from a plugin, add additional specs for each import. -For example, to import LazyVim core plugins and an optional plugin: - ->lua - require("lazy").setup({ - spec = { - { "LazyVim/LazyVim", import = "lazyvim.plugins" }, - { import = "lazyvim.plugins.extras.coding.copilot" }, - } - }) -< - -When you import specs, you can override them by simply adding a spec for the -same plugin to your local specs, adding any keys you want to override / merge. - -`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with -the parent spec. Any other property will override the property from the parent -spec. - - -============================================================================== -8. 🔥 Developers *lazy.nvim-🔥-developers* - -To make it easier for users to install your plugin, you can include a package -spec in your repo. - - -BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* - -- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: - >lua - return { "me/my-plugin", opts = {} } - < -- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. - >lua - { "nvim-lua/plenary.nvim", lazy = true } - < -- Always use `opts` instead of `config` when possible. `config` is almost never - needed. -- Only use `dependencies` if a plugin needs the dep to be installed **AND** - loaded. Lua plugins/libraries are automatically loaded when they are - `require()`d, so they don’t need to be in `dependencies`. -- Inside a `build` function or `*.lua` build file, use - `coroutine.yield(msg:string|LazyMsg)` to show progress. -- Don’t change the `cwd` in your build function, since builds run in parallel - and changing the `cwd` will affect other builds. - - -BUILDING *lazy.nvim-🔥-developers-building* - -The spec **build** property can be one of the following: - -- `fun(plugin: LazyPlugin)`: a function that builds the plugin. -- `*.lua`: a Lua file that builds the plugin (like `build.lua`) -- `":Command"`: a Neovim command -- `"rockspec"`: this will run `luarocks make` in the plugin’s directory - This is automatically set by the `rockspec` package source. -- any other **string** will be run as a shell command -- a `list` of any of the above to run multiple build steps -- if no `build` is specified, but a `build.lua` file exists, that will be used instead. - -Build functions and `*.lua` files run asynchronously in a coroutine. Use -`coroutine.yield(msg:string|LazyMsg)` to show progress. - -Yielding will also schedule the next `coroutine.resume()` to run in the next -tick, so you can do long-running tasks without blocking Neovim. - ->lua - ---@class LazyMsg - ---@field msg string - ---@field level? number vim.log.levels.XXX -< - -Use `vim.log.levels.TRACE` to only show the message as a **status** message for -the task. - - - -MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* - -**lazy.nvim** comes with some built-in functionality to help you create a -minimal init for your plugin. - -I mainly use this for testing and for users to create a `repro.lua`. - -When running in **headless** mode, **lazy.nvim** will log any messages to the -terminal. See `opts.headless` for more info. - -**minit** will install/load all your specs and will always run an update as -well. - - -BOOTSTRAP ~ - ->lua - -- setting this env will override all XDG paths - vim.env.LAZY_STDPATH = ".tests" - -- this will install lazy in your stdpath - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() -< - - -TESTING WITH BUSTED ~ - -This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. - -Below is an example of how I use **minit** to run tests with busted - in **LazyVim**. - ->lua - #!/usr/bin/env -S nvim -l - - vim.env.LAZY_STDPATH = ".tests" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - -- Setup lazy.nvim - require("lazy.minit").busted({ - spec = { - "LazyVim/starter", - "williamboman/mason-lspconfig.nvim", - "williamboman/mason.nvim", - "nvim-treesitter/nvim-treesitter", - }, - }) -< - -To use this, you can run: - ->sh - nvim -l ./tests/busted.lua tests -< - -If you want to inspect the test environment, run: - ->sh - nvim -u ./tests/busted.lua -< - - -REPRO.LUA ~ - ->lua - vim.env.LAZY_STDPATH = ".repro" - load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - - require("lazy.minit").repro({ - spec = { - "stevearc/conform.nvim", - "nvim-neotest/nvim-nio", - }, - }) - - -- do anything else you need to do to reproduce the issue -< - -Then run it with: - ->sh - nvim -u repro.lua -< - -============================================================================== -9. Links *lazy.nvim-links* +1. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png -2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png -3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 2cb8af1eb14184442d718d6418e26ccd5adf535c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 9 Jul 2024 17:25:39 +0200 Subject: [PATCH 729/815] ci: skip docs on main --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 60f92cf..95c1e6f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,3 +12,4 @@ jobs: with: plugin: lazy.nvim repo: folke/lazy.nvim + docs: false From d1de92dffab5a862332fdd1892889d362369c12f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 9 Jul 2024 15:26:28 +0000 Subject: [PATCH 730/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1398 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1352 insertions(+), 46 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index f2ef56a..c2c9695 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -1,61 +1,130 @@ -*lazy.nvim.txt* For Neovim Last change: 2024 July 09 +*lazy.nvim.txt* A modern plugin manager for Neovim ============================================================================== Table of Contents *lazy.nvim-table-of-contents* - - Features |lazy.nvim-features| - - Requirements |lazy.nvim-requirements| - - Getting Started |lazy.nvim-getting-started| -1. Links |lazy.nvim-links| -Install -· -Configure -· -Docs - - - - - - - - - - - - - - +1. 📰 What’s new? |lazy.nvim-📰-what’s-new?| + - 11.x |lazy.nvim-📰-what’s-new?-11.x| +2. 🚀 Getting Started |lazy.nvim-🚀-getting-started| + - ✨ Features |lazy.nvim-🚀-getting-started-✨-features| + - ⚡️ Requirements |lazy.nvim-🚀-getting-started-⚡️-requirements| +3. 🛠️ Installation |lazy.nvim-🛠️-installation| + - Structured Setup |lazy.nvim-🛠️-installation-structured-setup| + - Single File Setup |lazy.nvim-🛠️-installation-single-file-setup| +4. 🔌 Plugin Spec |lazy.nvim-🔌-plugin-spec| + - Spec Source |lazy.nvim-🔌-plugin-spec-spec-source| + - Spec Loading |lazy.nvim-🔌-plugin-spec-spec-loading| + - Spec Setup |lazy.nvim-🔌-plugin-spec-spec-setup| + - Spec Lazy Loading |lazy.nvim-🔌-plugin-spec-spec-lazy-loading| + - Spec Versioning |lazy.nvim-🔌-plugin-spec-spec-versioning| + - Spec Advanced |lazy.nvim-🔌-plugin-spec-spec-advanced| + - Examples |lazy.nvim-🔌-plugin-spec-examples| + - Lazy Loading |lazy.nvim-🔌-plugin-spec-lazy-loading| + - Versioning |lazy.nvim-🔌-plugin-spec-versioning| +5. 📦 Packages |lazy.nvim-📦-packages| + - Lazy |lazy.nvim-📦-packages-lazy| + - Rockspec |lazy.nvim-📦-packages-rockspec| + - Packspec |lazy.nvim-📦-packages-packspec| +6. ⚙️ Configuration |lazy.nvim-⚙️-configuration| + - 🌈 Highlight Groups|lazy.nvim-⚙️-configuration-🌈-highlight-groups| +7. 🚀 Usage |lazy.nvim-🚀-usage| + - ▶️ Startup Sequence |lazy.nvim-🚀-usage-▶️-startup-sequence| + - 🚀 Commands |lazy.nvim-🚀-usage-🚀-commands| + - 📆 User Events |lazy.nvim-🚀-usage-📆-user-events| + - ❌ Uninstalling |lazy.nvim-🚀-usage-❌-uninstalling| + - 🔒 Lockfile |lazy.nvim-🚀-usage-🔒-lockfile| + - 📦 Migration Guide |lazy.nvim-🚀-usage-📦-migration-guide| + - ⚡ Profiling & Debug |lazy.nvim-🚀-usage-⚡-profiling-&-debug| + - 📂 Structuring Your Plugins|lazy.nvim-🚀-usage-📂-structuring-your-plugins| +8. 🔥 Developers |lazy.nvim-🔥-developers| + - Best Practices |lazy.nvim-🔥-developers-best-practices| + - Building |lazy.nvim-🔥-developers-building| + - Minit (Minimal Init) |lazy.nvim-🔥-developers-minit-(minimal-init)| +9. Links |lazy.nvim-links| + +============================================================================== +1. 📰 What’s new? *lazy.nvim-📰-what’s-new?* +11.X *lazy.nvim-📰-what’s-new?-11.x* + +- **New Website**: There’s a whole new website with a fresh look and improved + documentation. Check it out at . The GitHub `README.md` + has been updated to point to the new website. The `vimdoc` contains all the + information that is available on the website. +- **Spec Resolution & Merging**: the code that resolves a final spec from a + plugin’s fragments has been rewritten. This should be a tiny bit faster, but + more importantly, fixes some issues and is easier to maintain. +- Packages can now specify their dependencies + and configuration using one of: + - **Lazy**: `lazy.lua` file + - **Rockspec**: luarocks `*-scm-1.rockspec` file + - **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + Related _lazy.nvim_ options: + >lua + { + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", -- will only be used when rocks.enabled is true + "packspec", + }, + }, + rocks = { + enabled = true, + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + } + < +- Installing neorg is now as simple as: + >lua + { "nvim-neorg/neorg", opts = {} } + < +- Packages are not limited to just Neovim plugins. You can install any + **luarocks** package, like: + >lua + { "https://github.com/lubyk/yaml" } + < + Luarocks packages without a `/lua` directory are never lazy-loaded, since + it’s just a library. +- `build` functions or `*.lua` build files (like `build.lua`) now run + asynchronously. You can use `coroutine.yield(status_msg)` to show progress. + Yielding will also schedule the next `resume` to run in the next tick, so you + can do long-running tasks without blocking Neovim. +============================================================================== +2. 🚀 Getting Started *lazy.nvim-🚀-getting-started* **lazy.nvim** is a modern plugin manager for Neovim. -FEATURES *lazy.nvim-features* +✨ FEATURES *lazy.nvim-🚀-getting-started-✨-features* -- Manage all your Neovim plugins with a powerful UI -- Fast startup times thanks to automatic caching and bytecode compilation of Lua modules -- Partial clones instead of shallow clones -- Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings -- Automatically install missing plugins before starting up Neovim, allowing you to start using it right away -- Async execution for improved performance -- No need to manually compile plugins -- Correct sequencing of dependencies -- Configurable in multiple files -- Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs -- Dev options and patterns for using local plugins -- Profiling tools to optimize performance -- Lockfile `lazy-lock.json` to keep track of installed plugins -- Automatically check for updates -- Commit, branch, tag, version, and full Semver support -- Statusline component to see the number of pending updates -- Automatically lazy-loads colorschemes +- 📦 Manage all your Neovim plugins with a powerful UI +- 🚀 Fast startup times thanks to automatic caching and bytecode compilation of Lua modules +- 💾 Partial clones instead of shallow clones +- 🔌 Automatic lazy-loading of Lua modules and lazy-loading on events, commands, filetypes, and key mappings +- ⏳ Automatically install missing plugins before starting up Neovim, allowing you to start using it right away +- 💪 Async execution for improved performance +- 🛠️ No need to manually compile plugins +- 🧪 Correct sequencing of dependencies +- 📁 Configurable in multiple files +- 📚 Generates helptags of the headings in `README.md` files for plugins that don’t have vimdocs +- 💻 Dev options and patterns for using local plugins +- 📊 Profiling tools to optimize performance +- 🔒 Lockfile `lazy-lock.json` to keep track of installed plugins +- 🔎 Automatically check for updates +- 📋 Commit, branch, tag, version, and full Semver support +- 📈 Statusline component to see the number of pending updates +- 🎨 Automatically lazy-loads colorschemes -REQUIREMENTS *lazy.nvim-requirements* +⚡️ REQUIREMENTS *lazy.nvim-🚀-getting-started-⚡️-requirements* - Neovim >= **0.8.0** (needs to be built with **LuaJIT**) - Git >= **2.19.0** (for partial clones support) @@ -64,14 +133,1251 @@ REQUIREMENTS *lazy.nvim-requirements* You can remove `rockspec` from `opts.pkg.sources` to disable this feature. -GETTING STARTED *lazy.nvim-getting-started* +============================================================================== +3. 🛠️ Installation *lazy.nvim-🛠️-installation* + +There are multiple ways to install **lazy.nvim**. The **Structured Setup** is +the recommended way, but you can also use the **Single File Setup** if you +prefer to keep everything in your `init.lua`. + +Please refer to the Configuration section for an overview of +all available options. + + + + +STRUCTURED SETUP *lazy.nvim-🛠️-installation-structured-setup* + +>lua + require("config.lazy") +< + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< + +You can then create your plugin specs in `~/.config/nvim/lua/plugins/`. Each +file should return a table with the plugins you want to install. + +For more info see Structuring Your Plugins + + +SINGLE FILE SETUP *lazy.nvim-🛠️-installation-single-file-setup* + +>lua + -- Bootstrap lazy.nvim + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end + end + vim.opt.rtp:prepend(lazypath) + + -- Make sure to setup `mapleader` and `maplocalleader` before + -- loading lazy.nvim so that mappings are correct. + -- This is also a good place to setup other settings (vim.opt) + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + -- Setup lazy.nvim + require("lazy").setup({ + -- highlight-start + spec = { + -- add your plugins here + }, + -- highlight-end + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true }, + }) +< -Check the documentation website for more information. ============================================================================== -1. Links *lazy.nvim-links* +4. 🔌 Plugin Spec *lazy.nvim-🔌-plugin-spec* + + +SPEC SOURCE *lazy.nvim-🔌-plugin-spec-spec-source* + + ----------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------- + [1] string? Short plugin url. Will be expanded using + config.git.url_format. Can also be a url or dir. + + dir string? A directory pointing to a local plugin + + 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 + + dev boolean? When true, a local plugin directory will be used instead. See + config.dev + ----------------------------------------------------------------------------------- +A valid spec should define one of `[1]`, `dir` or `url`. + + +SPEC LOADING *lazy.nvim-🔌-plugin-spec-spec-loading* + + -------------------------------------------------------------------------------------------------- + Property Type Description + -------------- ------------------------- --------------------------------------------------------- + dependencies LazySpec[] A list of plugin names or plugin specs that should be + loaded when the plugin loads. Dependencies are always + lazy-loaded unless specified otherwise. When specifying a + name, make sure the plugin spec has been defined + somewhere else. + + enabled boolean? or fun():boolean When false, or if the function returns false, then this + plugin will not be included in the spec + + cond boolean? or Behaves the same as enabled, but won’t uninstall the + fun(LazyPlugin):boolean plugin when the condition is false. Useful to disable + some plugins in vscode, or firenvim for example. + + priority number? Only useful for start plugins (lazy=false) to force + loading certain plugins first. Default priority is 50. + It’s recommended to set this to a high number for + colorschemes. + -------------------------------------------------------------------------------------------------- + +SPEC SETUP *lazy.nvim-🔌-plugin-spec-spec-setup* + + -------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ----------------------------- --------------------------------------------------------- + init fun(LazyPlugin) init functions are always executed during startup. Mostly + useful for setting vim.g.* configuration used by Vim + plugins startup + + opts table or opts should be a table (will be merged with parent + fun(LazyPlugin, opts:table) specs), return a table (replaces parent specs) or should + change a table. The table will be passed to the + Plugin.config() function. Setting this value will imply + Plugin.config() + + config fun(LazyPlugin, opts:table) config is executed when the plugin loads. The default + or true implementation will automatically run + require(MAIN).setup(opts) if opts or config = true is + set. Lazy uses several heuristics to determine the + plugin’s MAIN module automatically based on the plugin’s + name. (opts is the recommended way to configure plugins). + + main string? You can specify the main module to use for config() and + opts(), in case it can not be determined automatically. + See config() + + build fun(LazyPlugin) or string or build is executed when a plugin is installed or updated. + false or a list of build See Building for more information. + commands + -------------------------------------------------------------------------------------------------- +Always use `opts` instead of `config` when possible. `config` is almost never +needed. + + + + +SPEC LAZY LOADING *lazy.nvim-🔌-plugin-spec-spec-lazy-loading* + + -------------------------------------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------------------------------------------------------------- ---------------------------------------- + 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 + + event string? or string[] or Lazy-load on event. Events can be + fun(self:LazyPlugin, event:string[]):string[] or specified as BufEnter or with a pattern + {event:string[]\|string, pattern?:string[]\|string} like BufEnter *.lua + + cmd string? or string[] or Lazy-load on command + fun(self:LazyPlugin, cmd:string[]):string[] + + ft string? or string[] or Lazy-load on filetype + fun(self:LazyPlugin, ft:string[]):string[] + + keys string? or string[] or LazyKeysSpec[] or Lazy-load on key mapping + fun(self:LazyPlugin, keys:string[]):(string \| LazyKeysSpec)[] + -------------------------------------------------------------------------------------------------------------------- +Refer to the Lazy Loading <./lazy_loading.md> section for more information. + + +SPEC VERSIONING *lazy.nvim-🔌-plugin-spec-spec-versioning* + + ------------------------------------------------------------------------------ + Property Type Description + ------------ -------------------- -------------------------------------------- + branch string? Branch of the repository + + tag string? Tag of the repository + + commit string? Commit of the repository + + version string? or false to Version to use from the repository. Full + override the default Semver ranges are supported + + pin boolean? When true, this plugin will not be included + in updates + + submodules boolean? When false, git submodules will not be + fetched. Defaults to true + ------------------------------------------------------------------------------ +Refer to the Versioning <./versioning.md> section for more information. + + +SPEC ADVANCED *lazy.nvim-🔌-plugin-spec-spec-advanced* + + ---------------------------------------------------------------------------------------- + Property Type Description + ---------- ---------- ------------------------------------------------------------------ + optional boolean? When a spec is tagged optional, it will only be included in the + final spec, when the same plugin has been specified at least once + somewhere else without optional. This is mainly useful for Neovim + distros, to allow setting options on plugins that may/may not be + part of the user’s plugins. + + specs LazySpec A list of plugin specs defined in the scope of the plugin. This is + mainly useful for Neovim distros, to allow setting options on + plugins that may/may not be part of the user’s plugins. When the + plugin is disabled, none of the scoped specs will be included in + the final spec. Similar to dependencies without the automatic + loading of the specs. + + module false? Do not automatically load this Lua module when it’s required + somewhere + + import string? Import the given spec module. + ---------------------------------------------------------------------------------------- + +EXAMPLES *lazy.nvim-🔌-plugin-spec-examples* + +>lua + return { + -- the colorscheme should be available when starting Neovim + { + "folke/tokyonight.nvim", + lazy = false, -- make sure we load this during startup if it is your main colorscheme + priority = 1000, -- make sure to load this before all the other start plugins + config = function() + -- load the colorscheme here + vim.cmd([[colorscheme tokyonight]]) + end, + }, + + -- I have a separate config.mappings file where I require which-key. + -- With lazy the plugin will be automatically loaded when it is required somewhere + { "folke/which-key.nvim", lazy = true }, + + { + "nvim-neorg/neorg", + -- lazy-load on filetype + ft = "norg", + -- options for neorg. This will automatically call `require("neorg").setup(opts)` + opts = { + load = { + ["core.defaults"] = {}, + }, + }, + }, + + { + "dstein64/vim-startuptime", + -- lazy-load on a command + cmd = "StartupTime", + -- init is called during startup. Configuration for vim plugins typically should be set in an init function + init = function() + vim.g.startuptime_tries = 10 + end, + }, + + { + "hrsh7th/nvim-cmp", + -- load cmp on InsertEnter + event = "InsertEnter", + -- these dependencies will only be loaded when cmp loads + -- dependencies are always lazy-loaded unless specified otherwise + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + }, + config = function() + -- ... + end, + }, + + -- if some code requires a module from an unloaded plugin, it will be automatically loaded. + -- So for api plugins like devicons, we can always set lazy=true + { "nvim-tree/nvim-web-devicons", lazy = true }, + + -- you can use the VeryLazy event for things that can + -- load later and are not important for the initial UI + { "stevearc/dressing.nvim", event = "VeryLazy" }, + + { + "Wansmer/treesj", + keys = { + { "J", "TSJToggle", desc = "Join Toggle" }, + }, + opts = { use_default_keymaps = false, max_join_length = 150 }, + }, + + { + "monaqa/dial.nvim", + -- lazy-load on keys + -- mode is `n` by default. For more advanced options, check the section on key mappings + keys = { "", { "", mode = "n" } }, + }, + + -- local plugins need to be explicitly configured with dir + { dir = "~/projects/secret.nvim" }, + + -- you can use a custom url to fetch a plugin + { url = "git@github.com:folke/noice.nvim.git" }, + + -- local plugins can also be configured with the dev option. + -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub + -- With the dev option, you can easily switch between the local and installed version of a plugin + { "folke/noice.nvim", dev = true }, + } +< + + +LAZY LOADING *lazy.nvim-🔌-plugin-spec-lazy-loading* + +**lazy.nvim** automagically lazy-loads Lua modules. This means that if you have +a plugin `A` that is lazy-loaded and a plugin `B` that requires a module of +plugin `A`, then plugin `A` will be loaded on demand as expected. + + +Additionally, you can also lazy-load on **events**, **commands**, **file +types** and **key mappings**. + +Plugins will be lazy-loaded when one of the following is `true`: + +- The plugin only exists as a dependency in your spec +- It has an `event`, `cmd`, `ft` or `keys` key +- `config.defaults.lazy == true` + + +🌈 COLORSCHEMES ~ + +Colorscheme plugins can be configured with `lazy=true`. The plugin will +automagically load when doing `colorscheme foobar`. + + + +⌨️ LAZY KEY MAPPINGS ~ + +The `keys` property can be a `string` or `string[]` for simple normal-mode +mappings, or it can be a `LazyKeysSpec` table with the following key-value +pairs: + +- **[1]**: (`string`) lhs **(required)** +- **[2]**: (`string|fun()`) rhs **(optional)** +- **mode**: (`string|string[]`) mode **(optional, defaults to "n")** +- **ft**: (`string|string[]`) `filetype` for buffer-local keymaps **(optional)** +- any other option valid for `vim.keymap.set` + +Key mappings will load the plugin the first time they get executed. + +When `[2]` is `nil`, then the real mapping has to be created by the `config()` +function. + +>lua + -- Example for neo-tree.nvim + { + "nvim-neo-tree/neo-tree.nvim", + keys = { + { "ft", "Neotree toggle", desc = "NeoTree" }, + }, + config = function() + require("neo-tree").setup() + end, + } +< + + +VERSIONING *lazy.nvim-🔌-plugin-spec-versioning* + +If you want to install a specific revision of a plugin, you can use `commit`, +`tag`, `branch`, `version`. + +The `version` property supports Semver ranges. + + + +EXAMPLES ~ + +- `*`: latest stable version (this excludes pre-release versions) +- `1.2.x`: any version that starts with `1.2`, such as `1.2.0`, `1.2.3`, etc. +- `^1.2.3`: any version that is compatible with `1.2.3`, such as `1.3.0`, `1.4.5`, etc., but not `2.0.0`. +- `~1.2.3`: any version that is compatible with `1.2.3`, such as `1.2.4`, `1.2.5`, but not `1.3.0`. +- `>1.2.3`: any version that is greater than `1.2.3`, such as `1.3.0`, `1.4.5`, etc. +- `>=1.2.3`: any version that is greater than or equal to `1.2.3`, such as `1.2.3`, `1.3.0`, `1.4.5`, etc. +- `<1.2.3`: any version that is less than `1.2.3`, such as `1.1.0`, `1.0.5`, etc. +- `<=1.2.3`: any version that is less than or equal to `1.2.3`, such as `1.2.3`, `1.1.0`, `1.0.5`, etc + + +============================================================================== +5. 📦 Packages *lazy.nvim-📦-packages* + +**lazy.nvim** supports three ways for plugins to define their dependencies and +configuration. + +- **Lazy**: `lazy.lua` file +- **Rockspec**: luarocks `*-scm-1.rockspec` file +- **Packspec**: `pkg.json` (experimental, since the format is not quite there yet) + +You can enable/disable package sources with `config.pkg.sources` +. The order of sources is important, as the first source that +finds a package will be used. + + + +LAZY *lazy.nvim-📦-packages-lazy* + +Using a `lazy.lua` file is the recommended way to define your plugin +dependencies and configuration. Syntax is the same as any plugin spec. + + +ROCKSPEC *lazy.nvim-📦-packages-rockspec* + +When a plugin contains a `*-1.rockspec` file, **lazy.nvim** will automatically +build the rock and its dependencies. + +A **rockspec** will only be used if one of the following is true: + +- the package does not have a `/lua` directory +- the package has a complex build step +- the package has dependencies (excluding `lua`) + + +PACKSPEC *lazy.nvim-📦-packages-packspec* + +Supports the pkg.json + format, with +a lazy extension in `lazy`. `lazy` can contain any valid lazy spec fields. They +will be added to the plugin’s spec. + + +============================================================================== +6. ⚙️ Configuration *lazy.nvim-⚙️-configuration* + +**lazy.nvim** comes with the following defaults: + +>lua + { + root = vim.fn.stdpath("data") .. "/lazy", -- directory where plugins will be installed + defaults = { + -- Set this to `true` to have all your plugins lazy-loaded by default. + -- Only do this if you know what you are doing, as it can lead to unexpected behavior. + lazy = false, -- should plugins be lazy-loaded? + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = nil, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + -- default `cond` you can use to globally disable a lot of plugins + -- when running inside vscode for example + cond = nil, ---@type boolean|fun(self:LazyPlugin):boolean|nil + }, + -- leave nil when passing the spec as the first argument to setup() + spec = nil, ---@type LazySpec + local_spec = true, -- load project specific .lazy.lua spec files. They will be added at the end of the spec. + lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json", -- lockfile generated after running update. + ---@type number? limit the maximum amount of concurrent tasks + concurrency = jit.os:find("Windows") and (vim.uv.available_parallelism() * 2) or nil, + git = { + -- defaults for the `Lazy log` command + -- log = { "--since=3 days ago" }, -- show commits from the last 3 days + log = { "-8" }, -- show the last 8 commits + timeout = 120, -- kill processes that take more than 2 minutes + url_format = "https://github.com/%s.git", + -- lazy.nvim requires git >=2.19.0. If you really want to use lazy with an older version, + -- then set the below to false. This should work, but is NOT supported and will + -- increase downloads a lot. + filter = true, + }, + pkg = { + enabled = true, + cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", + versions = true, -- Honor versions in pkg sources + -- the first package source that is found for a plugin will be used. + sources = { + "lazy", + "rockspec", + "packspec", + }, + }, + rocks = { + root = vim.fn.stdpath("data") .. "/lazy-rocks", + server = "https://nvim-neorocks.github.io/rocks-binaries/", + }, + dev = { + ---@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"} + fallback = false, -- Fallback to git when local plugin doesn't exist + }, + install = { + -- install missing plugins on startup. This doesn't increase startup time. + missing = true, + -- try to load one of these colorschemes when starting an installation during startup + colorscheme = { "habamax" }, + }, + ui = { + -- a number <1 is a percentage., >1 is a fixed size + size = { width = 0.8, height = 0.8 }, + wrap = true, -- wrap the lines in the ui + -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|. + border = "none", + -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent. + backdrop = 60, + title = nil, ---@type string only works when border is not "none" + title_pos = "center", ---@type "center" | "left" | "right" + -- Show pills on top of the Lazy window + pills = true, ---@type boolean + icons = { + cmd = " ", + config = "", + event = " ", + favorite = " ", + ft = " ", + init = " ", + import = " ", + keys = " ", + lazy = "󰒲 ", + loaded = "●", + not_loaded = "○", + plugin = " ", + runtime = " ", + require = "󰢱 ", + source = " ", + start = " ", + task = "✔ ", + list = { + "●", + "➜", + "★", + "‒", + }, + }, + -- leave nil, to automatically select a browser depending on your OS. + -- If you want to use a specific browser, you can define it here + browser = nil, ---@type string? + throttle = 20, -- how frequently should the ui process render events + custom_keys = { + -- You can define custom key maps here. If present, the description will + -- be shown in the help menu. + -- To disable one of the defaults, set it to false. + + ["l"] = { + function(plugin) + require("lazy.util").float_term({ "lazygit", "log" }, { + cwd = plugin.dir, + }) + end, + desc = "Open lazygit log", + }, + + ["t"] = { + function(plugin) + require("lazy.util").float_term(nil, { + cwd = plugin.dir, + }) + end, + desc = "Open terminal in plugin dir", + }, + }, + }, + diff = { + -- diff command can be one of: + -- * browser: opens the github compare view. Note that this is always mapped to as well, + -- so you can have a different command for diff + -- * git: will run git diff and open a buffer with filetype git + -- * terminal_git: will open a pseudo terminal with git diff + -- * diffview.nvim: will open Diffview to show the diff + cmd = "git", + }, + checker = { + -- automatically check for plugin updates + enabled = false, + concurrency = nil, ---@type number? set to 1 to check for updates very slowly + notify = true, -- get a notification when new updates are found + frequency = 3600, -- check for updates every hour + check_pinned = false, -- check for pinned packages that can't be updated + }, + change_detection = { + -- automatically check for config file changes and reload the ui + enabled = true, + notify = true, -- get a notification when changes are found + }, + performance = { + cache = { + enabled = true, + }, + reset_packpath = true, -- reset the package path to improve startup time + rtp = { + reset = true, -- reset the runtime path to $VIMRUNTIME and your config directory + ---@type string[] + paths = {}, -- add any custom paths here that you want to includes in the rtp + ---@type string[] list any plugins you want to disable here + disabled_plugins = { + -- "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + -- "tarPlugin", + -- "tohtml", + -- "tutor", + -- "zipPlugin", + }, + }, + }, + -- lazy can generate helptags from the headings in markdown readme files, + -- so :help works even for plugins that don't have vim docs. + -- when the readme opens with :help it will be correctly displayed as markdown + readme = { + enabled = true, + root = vim.fn.stdpath("state") .. "/lazy/readme", + files = { "README.md", "lua/**/README.md" }, + -- only generate markdown helptags for plugins that dont have docs + skip_if_doc_exists = true, + }, + state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things + -- Enable profiling of lazy.nvim. This will add some overhead, + -- so only enable this when you are debugging lazy.nvim + profiling = { + -- Enables extra stats on the debug tab related to the loader cache. + -- Additionally gathers stats about all package.loaders + loader = false, + -- Track each new require in the Lazy profiling tab + require = false, + }, + } +< + +If you don’t want to use a Nerd Font, you can replace the icons with Unicode symbols. ~ + +>lua + { + ui = { + icons = { + cmd = "⌘", + config = "🛠", + event = "📅", + ft = "📂", + init = "⚙", + keys = "🗝", + plugin = "🔌", + runtime = "💻", + require = "🌙", + source = "📄", + start = "🚀", + task = "📌", + lazy = "💤 ", + }, + }, + } +< + + +🌈 HIGHLIGHT GROUPS *lazy.nvim-⚙️-configuration-🌈-highlight-groups* + + ----------------------------------------------------------------------- + Highlight Group Default Group Description + ----------------------- ----------------------- ----------------------- + LazyButton CursorLine + + LazyButtonActive Visual + + LazyComment Comment + + LazyCommit @variable.builtin commit ref + + LazyCommitIssue Number + + LazyCommitScope Italic conventional commit + scope + + LazyCommitType Title conventional commit + type + + LazyDimmed Conceal property + + LazyDir @markup.link directory + + LazyH1 IncSearch home button + + LazyH2 Bold titles + + LazyLocal Constant + + LazyNoCond DiagnosticWarn unloaded icon for a + plugin where cond() was + false + + LazyNormal NormalFloat + + LazyProgressDone Constant progress bar done + + LazyProgressTodo LineNr progress bar todo + + LazyProp Conceal property + + LazyReasonCmd Operator + + LazyReasonEvent Constant + + LazyReasonFt Character + + LazyReasonImport Identifier + + LazyReasonKeys Statement + + LazyReasonPlugin Special + + LazyReasonRequire @variable.parameter + + LazyReasonRuntime @macro + + LazyReasonSource Character + + LazyReasonStart @variable.member + + LazySpecial @punctuation.special + + LazyTaskError ErrorMsg task errors + + LazyTaskOutput MsgArea task output + + LazyUrl @markup.link url + + LazyValue @string value of a property + ----------------------------------------------------------------------- + +============================================================================== +7. 🚀 Usage *lazy.nvim-🚀-usage* + + +▶️ STARTUP SEQUENCE *lazy.nvim-🚀-usage-▶️-startup-sequence* + +**lazy.nvim** does **NOT** use Neovim packages and even disables plugin loading +completely (`vim.go.loadplugins = false`). It takes over the complete startup +sequence for more flexibility and better performance. + +In practice this means that step 10 of |Neovim Initialization| is done by Lazy: + +1. All the plugins’ `init()` functions are executed +2. All plugins with `lazy=false` are loaded. This includes sourcing `/plugin` and `/ftdetect` files. (`/after` will not be sourced yet) +3. All files from `/plugin` and `/ftdetect` directories in your rtp are sourced (excluding `/after`) +4. All `/after/plugin` files are sourced (this includes `/after` from plugins) + +Files from runtime directories are always sourced in alphabetical order. + + +🚀 COMMANDS *lazy.nvim-🚀-usage-🚀-commands* + +Plugins are managed with the `:Lazy` command. Open the help with `` to see +all the key mappings. + +You can press `` on a plugin to show its details. Most properties can be +hovered with `` to open links, help files, readmes, git commits and git +issues. + +Lazy can automatically check for updates in the background. This feature can be +enabled with `config.checker.enabled = true`. + +Any operation can be started from the UI, with a sub command or an API +function: + + ---------------------------------------------------------------------------------- + Command Lua Description + ------------------------- -------------------------------- ----------------------- + :Lazy build {plugins} require("lazy").build(opts) Rebuild a plugin + + :Lazy check [plugins] require("lazy").check(opts?) Check for updates and + show the log (git + fetch) + + :Lazy clean [plugins] require("lazy").clean(opts?) Clean plugins that are + no longer needed + + :Lazy clear require("lazy").clear() Clear finished tasks + + :Lazy debug require("lazy").debug() Show debug information + + :Lazy health require("lazy").health() Run :checkhealth lazy + + :Lazy help require("lazy").help() Toggle this help page + + :Lazy home require("lazy").home() Go back to plugin list + + :Lazy install [plugins] require("lazy").install(opts?) Install missing plugins + + :Lazy load {plugins} require("lazy").load(opts) Load a plugin that has + not been loaded yet. + Similar to :packadd. + Like + :Lazy load foo.nvim. + Use :Lazy! load to skip + cond checks. + + :Lazy log [plugins] require("lazy").log(opts?) Show recent updates + + :Lazy profile require("lazy").profile() Show detailed profiling + + :Lazy reload {plugins} require("lazy").reload(opts) Reload a plugin + (experimental!!) + + :Lazy restore [plugins] require("lazy").restore(opts?) Updates all plugins to + the state in the + lockfile. For a single + plugin: restore it to + the state in the + lockfile or to a given + commit under the cursor + + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update + + :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This + will also update the + lockfile + ---------------------------------------------------------------------------------- +Any command can have a **bang** to make the command wait till it finished. For +example, if you want to sync lazy from the cmdline, you can use: + +>shell + nvim --headless "+Lazy! sync" +qa +< + +`opts` is a table with the following key-values: + +- **wait**: when true, then the call will wait till the operation completed +- **show**: when false, the UI will not be shown +- **plugins**: a list of plugin names to run the operation on +- **concurrency**: limit the `number` of concurrently running tasks + +Stats API (`require("lazy").stats()`): + +>lua + { + -- startuptime in milliseconds till UIEnter + startuptime = 0, + -- when true, startuptime is the accurate cputime for the Neovim process. (Linux & macOS) + -- this is more accurate than `nvim --startuptime`, and as such will be slightly higher + -- when false, startuptime is calculated based on a delta with a timestamp when lazy started. + real_cputime = false, + count = 0, -- total number of plugins + loaded = 0, -- number of loaded plugins + ---@type table + times = {}, + } +< + +**lazy.nvim** provides a statusline component that you can use to show the +number of pending updates. Make sure to enable `config.checker.enabled = true` +to make this work. + +Example of configuring lualine.nvim ~ + +>lua + require("lualine").setup({ + sections = { + lualine_x = { + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = { fg = "#ff9e64" }, + }, + }, + }, + }) +< + + +📆 USER EVENTS *lazy.nvim-🚀-usage-📆-user-events* + +The following user events will be triggered: + +- **LazyDone**: when lazy has finished starting up and loaded your config +- **LazySync**: after running sync +- **LazyInstall**: after an install +- **LazyUpdate**: after an update +- **LazyClean**: after a clean +- **LazyCheck**: after checking for updates +- **LazyLog**: after running log +- **LazyLoad**: after loading a plugin. The `data` attribute will contain the plugin name. +- **LazySyncPre**: before running sync +- **LazyInstallPre**: before an install +- **LazyUpdatePre**: before an update +- **LazyCleanPre**: before a clean +- **LazyCheckPre**: before checking for updates +- **LazyLogPre**: before running log +- **LazyReload**: triggered by change detection after reloading plugin specs +- **VeryLazy**: triggered after `LazyDone` and processing `VimEnter` auto commands +- **LazyVimStarted**: triggered after `UIEnter` when `require("lazy").stats().startuptime` has been calculated. + Useful to update the startuptime on your dashboard. + + +❌ UNINSTALLING *lazy.nvim-🚀-usage-❌-uninstalling* + +To uninstall **lazy.nvim**, you need to remove the following files and +directories: + +- **data**: `~/.local/share/nvim/lazy` +- **state**: `~/.local/state/nvim/lazy` +- **lockfile**: `~/.config/nvim/lazy-lock.json` + + + Paths can differ if you changed `XDG` environment variables. + +🔒 LOCKFILE *lazy.nvim-🚀-usage-🔒-lockfile* + +After every **update**, the local lockfile (`lazy-lock.json`) is updated with +the installed revisions. It is recommended to have this file under version +control. + +If you use your Neovim config on multiple machines, using the lockfile, you can +ensure that the same version of every plugin is installed. + +If you are on another machine, you can do `:Lazy restore`, to update all your +plugins to the version from the lockfile. + + +📦 MIGRATION GUIDE *lazy.nvim-🚀-usage-📦-migration-guide* + + +PACKER.NVIM ~ + +- `setup` ➡️ `init` +- `requires` ➡️ `dependencies` +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` +- `lock` ➡️ `pin` +- `disable=true` ➡️ `enabled = false` +- `tag='*'` ➡️ `version="*"` +- `after` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `wants` is **not needed** for most use-cases. Use `dependencies` otherwise. +- `config` don’t support string type, use `fun(LazyPlugin)` instead. +- `module` is auto-loaded. No need to specify +- `keys` spec is |lazy.nvim-different| +- `rtp` can be accomplished with: + +>lua + config = function(plugin) + vim.opt.rtp:append(plugin.dir .. "/custom-rtp") + end +< + +With packer `wants`, `requires` and `after` can be used to manage dependencies. +With lazy, this isn’t needed for most of the Lua dependencies. They can be +installed just like normal plugins (even with `lazy=true`) and will be loaded +when other plugins need them. The `dependencies` key can be used to group those +required plugins with the one that requires them. The plugins which are added +as `dependencies` will always be lazy-loaded and loaded when the plugin is +loaded. + + +PAQ-NVIM ~ + +- `as` ➡️ `name` +- `opt` ➡️ `lazy` +- `run` ➡️ `build` + + +⚡ PROFILING & DEBUG *lazy.nvim-🚀-usage-⚡-profiling-&-debug* + +Great care has been taken to make the startup code (`lazy.core`) as efficient +as possible. During startup, all Lua files used before `VimEnter` or +`BufReadPre` are byte-compiled and cached, similar to what impatient.nvim + does. + +My config for example loads in about `11ms` with `93` plugins. I do a lot of +lazy-loading though :) + +**lazy.nvim** comes with an advanced profiler `:Lazy profile` to help you +improve performance. The profiling view shows you why and how long it took to +load your plugins. + + +🐛 DEBUG ~ + +See an overview of active lazy-loading handlers and what’s in the module +cache. + + +📂 STRUCTURING YOUR PLUGINS*lazy.nvim-🚀-usage-📂-structuring-your-plugins* + +Some users may want to split their plugin specs in multiple files. Instead of +passing a spec table to `setup()`, you can use a Lua module. The specs from the +**module** and any top-level **sub-modules** will be merged together in the +final spec, so it is not needed to add `require` calls in your main plugin file +to the other files. + +The benefits of using this approach: + +- Simple to **add** new plugin specs. Just create a new file in your plugins module. +- Allows for **caching** of all your plugin specs. This becomes important if you have a lot of smaller plugin specs. +- Spec changes will automatically be **reloaded** when they’re updated, so the `:Lazy` UI is always up to date. + +Example: + +- `~/.config/nvim/init.lua` + +>lua + require("lazy").setup("plugins") +< + +- `~/.config/nvim/lua/plugins.lua` or `~/.config/nvim/lua/plugins/init.lua` **(this file is optional)** + +>lua + return { + "folke/neodev.nvim", + "folke/which-key.nvim", + { "folke/neoconf.nvim", cmd = "Neoconf" }, + } +< + +- Any lua file in `~/.config/nvim/lua/plugins/*.lua` will be automatically merged in the main plugin spec + +For a real-life example, you can check LazyVim + and more specifically: + +- lazyvim.plugins contains all the plugin specs that will be loaded + + +↩️ IMPORTING SPECS, CONFIG & OPTS + +As part of a spec, you can add `import` statements to import additional plugin +modules. Both of the `setup()` calls are equivalent: + +>lua + require("lazy").setup("plugins") + + -- Same as: + require("lazy").setup({{import = "plugins"}}) +< + +To import multiple modules from a plugin, add additional specs for each import. +For example, to import LazyVim core plugins and an optional plugin: + +>lua + require("lazy").setup({ + spec = { + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + { import = "lazyvim.plugins.extras.coding.copilot" }, + } + }) +< + +When you import specs, you can override them by simply adding a spec for the +same plugin to your local specs, adding any keys you want to override / merge. + +`opts`, `dependencies`, `cmd`, `event`, `ft` and `keys` are always merged with +the parent spec. Any other property will override the property from the parent +spec. + + +============================================================================== +8. 🔥 Developers *lazy.nvim-🔥-developers* + +To make it easier for users to install your plugin, you can include a package +spec in your repo. + + +BEST PRACTICES *lazy.nvim-🔥-developers-best-practices* + +- If your plugin needs `setup()`, then create a simple `lazy.lua` file like this: + >lua + return { "me/my-plugin", opts = {} } + < +- Plugins that are pure lua libraries should be lazy-loaded with `lazy = true`. + >lua + { "nvim-lua/plenary.nvim", lazy = true } + < +- Always use `opts` instead of `config` when possible. `config` is almost never + needed. +- Only use `dependencies` if a plugin needs the dep to be installed **AND** + loaded. Lua plugins/libraries are automatically loaded when they are + `require()`d, so they don’t need to be in `dependencies`. +- Inside a `build` function or `*.lua` build file, use + `coroutine.yield(msg:string|LazyMsg)` to show progress. +- Don’t change the `cwd` in your build function, since builds run in parallel + and changing the `cwd` will affect other builds. + + +BUILDING *lazy.nvim-🔥-developers-building* + +The spec **build** property can be one of the following: + +- `fun(plugin: LazyPlugin)`: a function that builds the plugin. +- `*.lua`: a Lua file that builds the plugin (like `build.lua`) +- `":Command"`: a Neovim command +- `"rockspec"`: this will run `luarocks make` in the plugin’s directory + This is automatically set by the `rockspec` package source. +- any other **string** will be run as a shell command +- a `list` of any of the above to run multiple build steps +- if no `build` is specified, but a `build.lua` file exists, that will be used instead. + +Build functions and `*.lua` files run asynchronously in a coroutine. Use +`coroutine.yield(msg:string|LazyMsg)` to show progress. + +Yielding will also schedule the next `coroutine.resume()` to run in the next +tick, so you can do long-running tasks without blocking Neovim. + +>lua + ---@class LazyMsg + ---@field msg string + ---@field level? number vim.log.levels.XXX +< + +Use `vim.log.levels.TRACE` to only show the message as a **status** message for +the task. + + + +MINIT (MINIMAL INIT) *lazy.nvim-🔥-developers-minit-(minimal-init)* + +**lazy.nvim** comes with some built-in functionality to help you create a +minimal init for your plugin. + +I mainly use this for testing and for users to create a `repro.lua`. + +When running in **headless** mode, **lazy.nvim** will log any messages to the +terminal. See `opts.headless` for more info. + +**minit** will install/load all your specs and will always run an update as +well. + + +BOOTSTRAP ~ + +>lua + -- setting this env will override all XDG paths + vim.env.LAZY_STDPATH = ".tests" + -- this will install lazy in your stdpath + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() +< + + +TESTING WITH BUSTED ~ + +This will add `"lunarmodules/busted"`, configure `hererocks` and run `busted`. + +Below is an example of how I use **minit** to run tests with busted + in **LazyVim**. + +>lua + #!/usr/bin/env -S nvim -l + + vim.env.LAZY_STDPATH = ".tests" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + -- Setup lazy.nvim + require("lazy.minit").busted({ + spec = { + "LazyVim/starter", + "williamboman/mason-lspconfig.nvim", + "williamboman/mason.nvim", + "nvim-treesitter/nvim-treesitter", + }, + }) +< + +To use this, you can run: + +>sh + nvim -l ./tests/busted.lua tests +< + +If you want to inspect the test environment, run: + +>sh + nvim -u ./tests/busted.lua +< + + +REPRO.LUA ~ + +>lua + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() + + require("lazy.minit").repro({ + spec = { + "stevearc/conform.nvim", + "nvim-neotest/nvim-nio", + }, + }) + + -- do anything else you need to do to reproduce the issue +< + +Then run it with: + +>sh + nvim -u repro.lua +< + +============================================================================== +9. Links *lazy.nvim-links* 1. *image*: https://user-images.githubusercontent.com/292349/208301737-68fb279c-ba70-43ef-a369-8c3e8367d6b1.png +2. *image*: https://user-images.githubusercontent.com/292349/208301766-5c400561-83c3-4811-9667-1ec4bb3c43b8.png +3. *image*: https://user-images.githubusercontent.com/292349/208301790-7eedbfa5-d202-4e70-852e-de68aa47233b.png Generated by panvimdoc From 54b003c650f07b771e61566f7be2629beb2b781f Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 11 Jul 2024 22:03:53 +0200 Subject: [PATCH 731/815] fix(util): strip `-lua` in normname --- lua/lazy/core/util.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 6d7c3b8..bdd42dd 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -66,7 +66,7 @@ end ---@param name string ---@return string function M.normname(name) - local ret = name:lower():gsub("^n?vim%-", ""):gsub("%.n?vim$", ""):gsub("%.lua", ""):gsub("[^a-z]+", "") + local ret = name:lower():gsub("^n?vim%-", ""):gsub("%.n?vim$", ""):gsub("[%.%-]lua", ""):gsub("[^a-z]+", "") return ret end From 17473db1d79ea30e06126834be7fd95ca511557b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 11 Jul 2024 22:04:06 +0200 Subject: [PATCH 732/815] feat: add plugin name to handlers.managed --- lua/lazy/core/handler/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/handler/init.lua b/lua/lazy/core/handler/init.lua index b7ce3e5..22d3252 100644 --- a/lua/lazy/core/handler/init.lua +++ b/lua/lazy/core/handler/init.lua @@ -5,7 +5,7 @@ local Util = require("lazy.core.util") ---@field type LazyHandlerTypes ---@field extends? LazyHandler ---@field active table> ----@field managed table +---@field managed table mapping handler keys to plugin names ---@field super LazyHandler local M = {} @@ -114,7 +114,7 @@ function M:add(plugin) if not self.active[key] then self.active[key] = {} self:_add(value) - self.managed[key] = key + self.managed[key] = plugin.name end self.active[key][plugin.name] = plugin.name end From 1d451b4c2ce957da05e2123ce1a001804fc7ea96 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 11 Jul 2024 22:32:11 +0200 Subject: [PATCH 733/815] ci: use mini.test instead of busted --- lua/lazy/minit.lua | 62 +++++++++++++++++++++++++++++++++++++++++++++- scripts/test | 2 +- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua index 6300730..bfe63c4 100644 --- a/lua/lazy/minit.lua +++ b/lua/lazy/minit.lua @@ -29,9 +29,12 @@ function M.setup(opts) local args = {} local is_busted = false + local is_minitest = false for _, a in ipairs(_G.arg) do if a == "--busted" then is_busted = true + elseif a == "--minitest" then + is_minitest = true else table.insert(args, a) end @@ -40,6 +43,8 @@ function M.setup(opts) if is_busted then opts = M.busted.setup(opts) + elseif is_minitest then + opts = M.minitest.setup(opts) end -- set stdpaths to use .tests @@ -49,7 +54,6 @@ function M.setup(opts) vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name end end - vim.o.loadplugins = true require("lazy").setup(opts) if vim.g.colors_name == nil then @@ -68,6 +72,8 @@ function M.setup(opts) if is_busted then M.busted.run() + elseif is_minitest then + M.minitest.run() end end @@ -89,6 +95,60 @@ function M.repro(opts) M.setup(opts) end +M.minitest = {} + +function M.minitest.run() + local Config = require("lazy.core.config") + -- disable termnial output for the tests + Config.options.headless = {} + + if not require("lazy.core.config").headless() then + return vim.notify("busted can only run in headless mode. Please run with `nvim -l`", vim.log.levels.WARN) + end + package.path = package.path .. ";" .. vim.uv.cwd() .. "/tests/?.lua" + local Test = require("mini.test") + local expect = Test.expect + local _assert = assert + local Assert = { + __call = function(_, ...) + return _assert(...) + end, + same = expect.equality, + equal = expect.equality, + are = { + equal = expect.equality, + }, + is_not = { + same = expect.no_equality, + }, + } + Assert.__index = Assert + -- assert = require("luassert") + assert = setmetatable({}, Assert) + require("mini.test").run() +end + +---@param opts LazyConfig +function M.minitest.setup(opts) + return M.extend({ + spec = { + { + "echasnovski/mini.test", + opts = { + collect = { + find_files = function() + return vim.fn.globpath("tests", "**/*_spec.lua", true, true) + end, + }, + -- script_path = "tests/minit.lua", + }, + }, + { dir = vim.uv.cwd() }, + }, + rocks = { hererocks = true }, + }, opts) +end + M.busted = {} function M.busted.run() diff --git a/scripts/test b/scripts/test index 4baf621..2ed43b9 100755 --- a/scripts/test +++ b/scripts/test @@ -1,3 +1,3 @@ #!/bin/env bash -nvim -l tests/minit.lua --busted tests -o utfTerminal "$@" +nvim -l tests/minit.lua --minitest tests -o utfTerminal "$@" From 070418dca1417e7df5c803d7366fd0c7b3e9c612 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2024 09:25:55 +0200 Subject: [PATCH 734/815] chore(main): release 11.11.0 (#1634) :robot: I have created a release *beep* *boop* --- ## [11.11.0](https://github.com/folke/lazy.nvim/compare/v11.10.4...v11.11.0) (2024-07-11) ### Features * add plugin name to handlers.managed ([17473db](https://github.com/folke/lazy.nvim/commit/17473db1d79ea30e06126834be7fd95ca511557b)) ### Bug Fixes * **minit:** add tests to package.path when running busted (helpers.lua etc) ([fadebdc](https://github.com/folke/lazy.nvim/commit/fadebdc76b71a1d3658a88a025c6c8fb4749e0f8)) * **util:** strip `-lua` in normname ([54b003c](https://github.com/folke/lazy.nvim/commit/54b003c650f07b771e61566f7be2629beb2b781f)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index a2f63d1..c71760f 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.10.4" + ".": "11.11.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ed551f..b2051d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [11.11.0](https://github.com/folke/lazy.nvim/compare/v11.10.4...v11.11.0) (2024-07-11) + + +### Features + +* add plugin name to handlers.managed ([17473db](https://github.com/folke/lazy.nvim/commit/17473db1d79ea30e06126834be7fd95ca511557b)) + + +### Bug Fixes + +* **minit:** add tests to package.path when running busted (helpers.lua etc) ([fadebdc](https://github.com/folke/lazy.nvim/commit/fadebdc76b71a1d3658a88a025c6c8fb4749e0f8)) +* **util:** strip `-lua` in normname ([54b003c](https://github.com/folke/lazy.nvim/commit/54b003c650f07b771e61566f7be2629beb2b781f)) + ## [11.10.4](https://github.com/folke/lazy.nvim/compare/v11.10.3...v11.10.4) (2024-07-08) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index c50b9c5..ff178c1 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.10.4" -- x-release-please-version +M.version = "11.11.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 54f70c757cdfc5da4740f2c22e057f3518872ef5 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 13 Jul 2024 09:44:59 +0200 Subject: [PATCH 735/815] ci: add luassert to minitest for now --- .github/ISSUE_TEMPLATE/bug_report.yml | 35 ++++++++------------------- lua/lazy/minit.lua | 15 +++++++++++- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 4a77601..9f95860 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -6,7 +6,10 @@ body: - type: markdown attributes: value: | - **Before** reporting an issue, make sure to read the [documentation](https://github.com/folke/lazy.nvim) and search [existing issues](https://github.com/folke/lazy.nvim/issues). Usage questions such as ***"How do I...?"*** belong in [Discussions](https://github.com/folke/lazy.nvim/discussions) and will be closed. + **Before** reporting an issue, make sure to read the [documentation](https://github.com/folke/lazy.nvim) + and search [existing issues](https://github.com/folke/lazy.nvim/issues). + + Usage questions such as ***"How do I...?"*** belong in [Discussions](https://github.com/folke/lazy.nvim/discussions) and will be closed. - type: checkboxes attributes: label: Did you check docs and existing issues? @@ -57,32 +60,14 @@ body: label: Repro description: Minimal `init.lua` to reproduce this issue. Save as `repro.lua` and run with `nvim -u repro.lua` value: | - -- DO NOT change the paths and don't remove the colorscheme - local root = vim.fn.fnamemodify("./.repro", ":p") + vim.env.LAZY_STDPATH = ".repro" + load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() - -- set stdpaths to use .repro - for _, name in ipairs({ "config", "data", "state", "cache" }) do - vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name - end - - -- bootstrap lazy - local lazypath = root .. "/plugins/lazy.nvim" - if not vim.loop.fs_stat(lazypath) then - vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath, }) - end - vim.opt.runtimepath:prepend(lazypath) - - -- install plugins - local plugins = { - "folke/tokyonight.nvim", - -- add any other plugins here - } - require("lazy").setup(plugins, { - root = root .. "/plugins", + require("lazy.minit").repro({ + spec = { + -- add any other plugins here + }, }) - - vim.cmd.colorscheme("tokyonight") - -- add anything else here render: Lua validations: required: false diff --git a/lua/lazy/minit.lua b/lua/lazy/minit.lua index bfe63c4..0b8f3ca 100644 --- a/lua/lazy/minit.lua +++ b/lua/lazy/minit.lua @@ -25,6 +25,9 @@ function M.setup(opts) opts = M.extend({ local_spec = false, change_detection = { enabled = false }, + dev = { + patterns = vim.env.LAZY_DEV and vim.split(vim.env.LAZY_DEV, ",") or nil, + }, }, opts) local args = {} @@ -121,10 +124,19 @@ function M.minitest.run() is_not = { same = expect.no_equality, }, + is_not_nil = function(a) + return expect.no_equality(nil, a) + end, + is_true = function(a) + return expect.equality(true, a) + end, + is_false = function(a) + return expect.equality(false, a) + end, } Assert.__index = Assert - -- assert = require("luassert") assert = setmetatable({}, Assert) + assert = require("luassert") require("mini.test").run() end @@ -132,6 +144,7 @@ end function M.minitest.setup(opts) return M.extend({ spec = { + "lunarmodules/luassert", { "echasnovski/mini.test", opts = { From 7ed9f7173cdec71a057053d7e6efc20c2c230b95 Mon Sep 17 00:00:00 2001 From: Ethan Wu Date: Sat, 13 Jul 2024 03:51:44 -0400 Subject: [PATCH 736/815] fix(lockfile): ensure newline at EOF for lockfile (#1639) ## Description The lockfile currently does not end with a newline at EOF. Text files should [end with a newline](https://unix.stackexchange.com/a/18789). This also lets you manually edit the lockfile in vim without 'fixeol' creating a spurious change for the added newline. This change however will create a change in users' lockfiles adding a newline upon updating, but since the lockfile would be changing anyways to update lazy.nvim itself, this is likely acceptable. ## Related Issue(s) *none* ## Screenshots *N/A* --- lua/lazy/manage/lock.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/lock.lua b/lua/lazy/manage/lock.lua index a1b4c74..b3c4444 100644 --- a/lua/lazy/manage/lock.lua +++ b/lua/lazy/manage/lock.lua @@ -42,7 +42,7 @@ function M.update() f:write(",\n") end end - f:write("\n}") + f:write("\n}\n") f:close() end From 58c6bc4ab298dc0d808d325754585f918a031919 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2024 10:07:17 +0200 Subject: [PATCH 737/815] chore(update): update repository (#1638) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Co-authored-by: folke <292349+folke@users.noreply.github.com> --- scripts/test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test b/scripts/test index 2ed43b9..ffbb540 100755 --- a/scripts/test +++ b/scripts/test @@ -1,3 +1,3 @@ #!/bin/env bash -nvim -l tests/minit.lua --minitest tests -o utfTerminal "$@" +nvim -l tests/minit.lua --minitest From 788feaf10efd5c8a849f7a0daef31ac0af1157bd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:16:17 +0200 Subject: [PATCH 738/815] chore(update): update repository (#1644) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Co-authored-by: folke <292349+folke@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9f95860..8468e01 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -68,6 +68,6 @@ body: -- add any other plugins here }, }) - render: Lua + render: lua validations: required: false From 93499c5deb37641c6cf71528a93f101d186b409f Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 13 Jul 2024 18:07:56 +0200 Subject: [PATCH 739/815] fix(config): check for lib64. Fixes #1343 --- .editorconfig | 12 ++++++++++++ lua/lazy/core/config.lua | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a9452c7 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 2 +charset = utf-8 diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index ff178c1..ee3e38b 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -284,6 +284,9 @@ function M.setup(opts) M.me = debug.getinfo(1, "S").source:sub(2) M.me = Util.norm(vim.fn.fnamemodify(M.me, ":p:h:h:h:h")) + local lib = vim.fn.fnamemodify(vim.v.progpath, ":p:h:h") .. "/lib" + lib = vim.uv.fs_stat(lib .. "64") and (lib .. "64") or lib + lib = lib .. "/nvim" if M.options.performance.rtp.reset then ---@type vim.Option vim.opt.rtp = { @@ -291,7 +294,7 @@ function M.setup(opts) vim.fn.stdpath("data") .. "/site", M.me, vim.env.VIMRUNTIME, - vim.fn.fnamemodify(vim.v.progpath, ":p:h:h") .. "/lib/nvim", + lib, vim.fn.stdpath("config") .. "/after", } end From 6e66f8e6550dd22467c11284e638dfccb5d514e4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:29:13 +0200 Subject: [PATCH 740/815] chore(update): update repository (#1648) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Co-authored-by: folke <292349+folke@users.noreply.github.com> --- .editorconfig | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.editorconfig b/.editorconfig index a9452c7..18616d3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,9 +1,5 @@ -# EditorConfig is awesome: https://EditorConfig.org - -# top-most EditorConfig file root = true -# Unix-style newlines with a newline ending every file [*] end_of_line = lf insert_final_newline = true From b02c9eae6a250f98908c146d1dc1a891f5019f0a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2024 22:50:19 +0200 Subject: [PATCH 741/815] chore(main): release 11.11.1 (#1643) :robot: I have created a release *beep* *boop* --- ## [11.11.1](https://github.com/folke/lazy.nvim/compare/v11.11.0...v11.11.1) (2024-07-13) ### Bug Fixes * **config:** check for lib64. Fixes [#1343](https://github.com/folke/lazy.nvim/issues/1343) ([93499c5](https://github.com/folke/lazy.nvim/commit/93499c5deb37641c6cf71528a93f101d186b409f)) * **lockfile:** ensure newline at EOF for lockfile ([#1639](https://github.com/folke/lazy.nvim/issues/1639)) ([7ed9f71](https://github.com/folke/lazy.nvim/commit/7ed9f7173cdec71a057053d7e6efc20c2c230b95)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index c71760f..4d14617 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.11.0" + ".": "11.11.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index b2051d3..39481ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [11.11.1](https://github.com/folke/lazy.nvim/compare/v11.11.0...v11.11.1) (2024-07-13) + + +### Bug Fixes + +* **config:** check for lib64. Fixes [#1343](https://github.com/folke/lazy.nvim/issues/1343) ([93499c5](https://github.com/folke/lazy.nvim/commit/93499c5deb37641c6cf71528a93f101d186b409f)) +* **lockfile:** ensure newline at EOF for lockfile ([#1639](https://github.com/folke/lazy.nvim/issues/1639)) ([7ed9f71](https://github.com/folke/lazy.nvim/commit/7ed9f7173cdec71a057053d7e6efc20c2c230b95)) + ## [11.11.0](https://github.com/folke/lazy.nvim/compare/v11.10.4...v11.11.0) (2024-07-11) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index ee3e38b..1206305 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -228,7 +228,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.11.0" -- x-release-please-version +M.version = "11.11.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 315191aa9e1b0ce5a023c01f959059411405b7c9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 11:19:51 +0200 Subject: [PATCH 742/815] chore(update): update repository (#1651) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Co-authored-by: folke <292349+folke@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 8468e01..5c225eb 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -17,6 +17,8 @@ body: options: - label: I have read all the lazy.nvim docs required: true + - label: I have updated the plugin to the latest version before submitting this issue + required: true - label: I have searched the existing issues of lazy.nvim required: true - label: I have searched the existing issues of plugins related to this issue From 9d445ebbd89401544a538c6af080e4d2785abb49 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:09:32 +0200 Subject: [PATCH 743/815] chore(update): update repository (#1653) Automated changes by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub action Co-authored-by: folke <292349+folke@users.noreply.github.com> --- .editorconfig | 1 - 1 file changed, 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 18616d3..8b176d5 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,7 +1,6 @@ root = true [*] -end_of_line = lf insert_final_newline = true indent_style = space indent_size = 2 From d731a6b005fd239e85e555bd57362382f6c1e461 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 16 Jul 2024 16:50:31 +0200 Subject: [PATCH 744/815] feat(git): added git network throttle to limit network related git ops per interval. Closes #1635 --- lua/lazy/core/config.lua | 7 +++++++ lua/lazy/manage/task/git.lua | 40 ++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 1206305..3ec89c6 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -34,6 +34,13 @@ M.defaults = { -- then set the below to false. This should work, but is NOT supported and will -- increase downloads a lot. filter = true, + -- rate of network related git operations (clone, fetch, checkout) + throttle = { + enabled = false, -- not enabled by default + -- max 2 ops every 5 seconds + rate = 2, + duration = 5 * 1000, -- in ms + }, }, pkg = { enabled = true, diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index 9425fec..bd7ee38 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -1,8 +1,45 @@ +local Async = require("lazy.async") local Config = require("lazy.core.config") local Git = require("lazy.manage.git") local Lock = require("lazy.manage.lock") local Util = require("lazy.util") +local throttle = {} +throttle.running = 0 +throttle.waiting = {} ---@type Async[] +throttle.timer = vim.uv.new_timer() + +function throttle.next() + throttle.running = 0 + while #throttle.waiting > 0 and throttle.running < Config.options.git.throttle.rate do + ---@type Async + local task = table.remove(throttle.waiting, 1) + task:resume() + throttle.running = throttle.running + 1 + end + if throttle.running == 0 then + throttle.timer:stop() + end +end + +function throttle.wait() + if not Config.options.git.throttle.enabled then + return + end + if not throttle.timer:is_active() then + throttle.timer:start(0, Config.options.git.throttle.duration, vim.schedule_wrap(throttle.next)) + end + local running = Async.running() + if throttle.running < Config.options.git.throttle.rate then + throttle.running = throttle.running + 1 + else + table.insert(throttle.waiting, running) + coroutine.yield("waiting") + running:suspend() + coroutine.yield("") + end +end + ---@type table local M = {} @@ -84,6 +121,7 @@ M.clone = { end, ---@async run = function(self) + throttle.wait() local args = { "clone", self.plugin.url, @@ -233,6 +271,7 @@ M.fetch = { ---@async run = function(self) + throttle.wait() local args = { "fetch", "--recurse-submodules", @@ -262,6 +301,7 @@ M.checkout = { ---@async ---@param opts {lockfile?:boolean} run = function(self, opts) + throttle.wait() local info = assert(Git.info(self.plugin.dir)) local target = assert(Git.get_target(self.plugin)) From 5473e3d77c13e40fc4758fa977a1f2c14d0b4ceb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:54:53 +0200 Subject: [PATCH 745/815] chore(main): release 11.12.0 (#1655) :robot: I have created a release *beep* *boop* --- ## [11.12.0](https://github.com/folke/lazy.nvim/compare/v11.11.1...v11.12.0) (2024-07-16) ### Features * **git:** added git network throttle to limit network related git ops per interval. Closes [#1635](https://github.com/folke/lazy.nvim/issues/1635) ([d731a6b](https://github.com/folke/lazy.nvim/commit/d731a6b005fd239e85e555bd57362382f6c1e461)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 4d14617..fc1c305 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.11.1" + ".": "11.12.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 39481ef..0ad1e73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.12.0](https://github.com/folke/lazy.nvim/compare/v11.11.1...v11.12.0) (2024-07-16) + + +### Features + +* **git:** added git network throttle to limit network related git ops per interval. Closes [#1635](https://github.com/folke/lazy.nvim/issues/1635) ([d731a6b](https://github.com/folke/lazy.nvim/commit/d731a6b005fd239e85e555bd57362382f6c1e461)) + ## [11.11.1](https://github.com/folke/lazy.nvim/compare/v11.11.0...v11.11.1) (2024-07-13) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 3ec89c6..facd1f8 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -235,7 +235,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.11.1" -- x-release-please-version +M.version = "11.12.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 6ca90a21202808796418e46d3cebfbb5a44e54a2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 18 Jul 2024 00:40:41 +0200 Subject: [PATCH 746/815] feat(ui): added mapping descriptions --- lua/lazy/view/float.lua | 2 +- lua/lazy/view/init.lua | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/lua/lazy/view/float.lua b/lua/lazy/view/float.lua index 3a59069..4131d72 100644 --- a/lua/lazy/view/float.lua +++ b/lua/lazy/view/float.lua @@ -166,7 +166,7 @@ function M:mount() self:augroup(true) end, { win = true }) self:focus() - self:on_key(ViewConfig.keys.close, self.close) + self:on_key(ViewConfig.keys.close, self.close, "Close") self:on({ "BufDelete", "BufHidden" }, self.close) if vim.bo[self.buf].buftype == "" then diff --git a/lua/lazy/view/init.lua b/lua/lazy/view/init.lua index 313d3ad..e8444eb 100644 --- a/lua/lazy/view/init.lua +++ b/lua/lazy/view/init.lua @@ -85,7 +85,7 @@ function M.create() require("lazy.manage.process").abort() require("lazy.async").abort() return ViewConfig.keys.abort - end, { silent = true, buffer = self.buf, expr = true }) + end, { silent = true, buffer = self.buf, expr = true, desc = "Abort" }) vim.keymap.set("n", "gx", "K", { buffer = self.buf, remap = true }) @@ -110,7 +110,7 @@ function M.create() self.state.plugin = open and selected or nil self:update() end - end) + end, "Details") self:on_key(ViewConfig.keys.next, function() local cursor = vim.api.nvim_win_get_cursor(self.view.win) @@ -121,7 +121,7 @@ function M.create() return end end - end) + end, "Next Plugin") self:on_key(ViewConfig.keys.prev, function() local cursor = vim.api.nvim_win_get_cursor(self.view.win) @@ -132,14 +132,14 @@ function M.create() return end end - end) + end, "Prev Plugin") self:on_key(ViewConfig.keys.profile_sort, function() if self.state.mode == "profile" then self.state.profile.sort_time_taken = not self.state.profile.sort_time_taken self:update() end - end) + end, "Sort Profile") self:on_key(ViewConfig.keys.profile_filter, function() if self.state.mode == "profile" then @@ -159,17 +159,18 @@ function M.create() end end) end - end) + end, "Filter Profile") for lhs, rhs in pairs(Config.options.ui.custom_keys) do if rhs then local handler = type(rhs) == "table" and rhs[1] or rhs + local desc = type(rhs) == "table" and rhs.desc or nil self:on_key(lhs, function() local plugin = self.render:get_plugin() if plugin then handler(plugin) end - end) + end, desc) end end @@ -219,17 +220,17 @@ function M:setup_patterns() ["(https?://%S+)"] = function(url) Util.open(url) end, - }, self.hover) + }, self.hover, "Hover") self:on_pattern(ViewConfig.keys.diff, { [commit_pattern] = function(hash) self:diff({ commit = hash }) end, - }, self.diff) + }, self.diff, "Diff") self:on_pattern(ViewConfig.commands.restore.key_plugin, { [commit_pattern] = function(hash) self:restore({ commit = hash }) end, - }, self.restore) + }, self.restore, "Restore") end ---@param opts? {commit:string} @@ -294,7 +295,8 @@ end ---@param key string ---@param patterns table ---@param fallback? fun(self) -function M:on_pattern(key, patterns, fallback) +---@param desc? string +function M:on_pattern(key, patterns, fallback, desc) self:on_key(key, function() local line = vim.api.nvim_get_current_line() local pos = vim.api.nvim_win_get_cursor(0) @@ -316,7 +318,7 @@ function M:on_pattern(key, patterns, fallback) if fallback then fallback(self) end - end) + end, desc) end function M:setup_modes() From 8f6225751138329da339eb6554d40158768d23ff Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:47:30 +0200 Subject: [PATCH 747/815] chore(main): release 11.13.0 (#1660) :robot: I have created a release *beep* *boop* --- ## [11.13.0](https://github.com/folke/lazy.nvim/compare/v11.12.0...v11.13.0) (2024-07-17) ### Features * **ui:** added mapping descriptions ([6ca90a2](https://github.com/folke/lazy.nvim/commit/6ca90a21202808796418e46d3cebfbb5a44e54a2)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index fc1c305..fa12dc5 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.12.0" + ".": "11.13.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ad1e73..44bd690 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.13.0](https://github.com/folke/lazy.nvim/compare/v11.12.0...v11.13.0) (2024-07-17) + + +### Features + +* **ui:** added mapping descriptions ([6ca90a2](https://github.com/folke/lazy.nvim/commit/6ca90a21202808796418e46d3cebfbb5a44e54a2)) + ## [11.12.0](https://github.com/folke/lazy.nvim/compare/v11.11.1...v11.12.0) (2024-07-16) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index facd1f8..b75b51c 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -235,7 +235,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.12.0" -- x-release-please-version +M.version = "11.13.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 124b864233367cc0665bfcd9872b1c974bfb225b Mon Sep 17 00:00:00 2001 From: Gert Burger Date: Thu, 18 Jul 2024 14:57:12 +0100 Subject: [PATCH 748/815] docs(commands): fix command ordering for sync (#1661) ## Description After a discussion on Slack we noticed that the description of the sync command is a bit vague. Some people, including myself, assumed `clean`/`install`/`update` referred to build steps being performed per plugin. Another person mentioned they thought it referred to the Lazy commands, which does make more sense. They also noticed that the order of the commands do not match the source code. So this PR corrects the order, assuming it was meant to be ordered, and mentions that those are commands for clarity. --- doc/lazy.nvim.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c2c9695..1694d24 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -988,8 +988,8 @@ function: lockfile or to a given commit under the cursor - :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and - update + :Lazy sync [plugins] require("lazy").sync(opts?) Run clean, install, and + update commands :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This will also update the From c92c6b5fd2b3a13c8999ab8379e43a79c9406e59 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 18 Jul 2024 13:57:58 +0000 Subject: [PATCH 749/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 1694d24..c2c9695 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -988,8 +988,8 @@ function: lockfile or to a given commit under the cursor - :Lazy sync [plugins] require("lazy").sync(opts?) Run clean, install, and - update commands + :Lazy sync [plugins] require("lazy").sync(opts?) Run install, clean and + update :Lazy update [plugins] require("lazy").update(opts?) Update plugins. This will also update the From 5bdb12a038e5a72cc793f38893f1a9c9fb741759 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 19 Jul 2024 08:57:35 +0200 Subject: [PATCH 750/815] fix(build): only load the plugin before build for `:` build commands --- lua/lazy/manage/task/plugin.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index fd6c12b..bd565f8 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -19,6 +19,9 @@ local B = {} ---@param task LazyTask ---@param build string function B.cmd(task, build) + if task.plugin.build ~= "rockspec" then + Loader.load(task.plugin, { task = "build" }) + end local cmd = vim.api.nvim_parse_cmd(build:sub(2), {}) --[[@as vim.api.keyset.cmd]] task:log(vim.api.nvim_cmd(cmd, { output = true })) end @@ -48,10 +51,6 @@ M.build = { run = function(self) vim.cmd([[silent! runtime plugin/rplugin.vim]]) - if self.plugin.build ~= "rockspec" then - Loader.load(self.plugin, { task = "build" }) - end - local builders = self.plugin.build -- Skip if `build` is set to `false` From 9a374a0fb4d3ac42dac4a129d4bead7252473c77 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:50:14 +0200 Subject: [PATCH 751/815] chore(main): release 11.13.1 (#1664) :robot: I have created a release *beep* *boop* --- ## [11.13.1](https://github.com/folke/lazy.nvim/compare/v11.13.0...v11.13.1) (2024-07-19) ### Bug Fixes * **build:** only load the plugin before build for `:` build commands ([5bdb12a](https://github.com/folke/lazy.nvim/commit/5bdb12a038e5a72cc793f38893f1a9c9fb741759)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index fa12dc5..4639dfb 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.13.0" + ".": "11.13.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 44bd690..1757c13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.13.1](https://github.com/folke/lazy.nvim/compare/v11.13.0...v11.13.1) (2024-07-19) + + +### Bug Fixes + +* **build:** only load the plugin before build for `:` build commands ([5bdb12a](https://github.com/folke/lazy.nvim/commit/5bdb12a038e5a72cc793f38893f1a9c9fb741759)) + ## [11.13.0](https://github.com/folke/lazy.nvim/compare/v11.12.0...v11.13.0) (2024-07-17) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index b75b51c..1753933 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -235,7 +235,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.13.0" -- x-release-please-version +M.version = "11.13.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 18d1c1b47e175cd58dc12bf4792ef4e9a50505fa Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 21 Jul 2024 12:41:54 +0200 Subject: [PATCH 752/815] fix(loader): add auto loaded module to package.loaded early to prevent require loops --- lua/lazy/core/loader.lua | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index c5cdca2..ac53690 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -552,15 +552,16 @@ function M.loader(modname) end if ret then - M.auto_load(modname, ret.modpath) local mod = package.loaded[modname] - if type(mod) == "table" then - return function() - return mod - end + if type(mod) ~= "table" then + mod = loadfile(ret.modpath, nil, nil, ret.stat)() end + package.loaded[modname] = mod + M.auto_load(modname, ret.modpath) -- selene: allow(incorrect_standard_library_use) - return loadfile(ret.modpath, nil, nil, ret.stat) + return function() + return mod + end end end From 8bef0742a2f6f587c8dba73e99e7fb2c05b3764a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 15:53:27 +0200 Subject: [PATCH 753/815] chore(main): release 11.13.2 (#1668) :robot: I have created a release *beep* *boop* --- ## [11.13.2](https://github.com/folke/lazy.nvim/compare/v11.13.1...v11.13.2) (2024-07-21) ### Bug Fixes * **loader:** add auto loaded module to package.loaded early to prevent require loops ([18d1c1b](https://github.com/folke/lazy.nvim/commit/18d1c1b47e175cd58dc12bf4792ef4e9a50505fa)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 4639dfb..a52e23c 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.13.1" + ".": "11.13.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1757c13..8094a59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.13.2](https://github.com/folke/lazy.nvim/compare/v11.13.1...v11.13.2) (2024-07-21) + + +### Bug Fixes + +* **loader:** add auto loaded module to package.loaded early to prevent require loops ([18d1c1b](https://github.com/folke/lazy.nvim/commit/18d1c1b47e175cd58dc12bf4792ef4e9a50505fa)) + ## [11.13.1](https://github.com/folke/lazy.nvim/compare/v11.13.0...v11.13.1) (2024-07-19) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 1753933..0029a30 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -235,7 +235,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.13.1" -- x-release-please-version +M.version = "11.13.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From a692bf86883457f45fe3f773bfc8bc4d9e4b070c Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 21 Jul 2024 17:32:12 +0200 Subject: [PATCH 754/815] revert: fix(loader): add auto loaded module to package.loaded early to prevent require loops This reverts commit 18d1c1b47e175cd58dc12bf4792ef4e9a50505fa. --- lua/lazy/core/loader.lua | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index ac53690..c5cdca2 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -552,16 +552,15 @@ function M.loader(modname) end if ret then - local mod = package.loaded[modname] - if type(mod) ~= "table" then - mod = loadfile(ret.modpath, nil, nil, ret.stat)() - end - package.loaded[modname] = mod M.auto_load(modname, ret.modpath) - -- selene: allow(incorrect_standard_library_use) - return function() - return mod + local mod = package.loaded[modname] + if type(mod) == "table" then + return function() + return mod + end end + -- selene: allow(incorrect_standard_library_use) + return loadfile(ret.modpath, nil, nil, ret.stat) end end From a09c876f6ef642c8feaea45932df73b058d9a083 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:34:22 +0200 Subject: [PATCH 755/815] chore(main): release 11.13.3 (#1669) :robot: I have created a release *beep* *boop* --- ## [11.13.3](https://github.com/folke/lazy.nvim/compare/v11.13.2...v11.13.3) (2024-07-21) ### Reverts * fix(loader): add auto loaded module to package.loaded early to prevent require loops ([a692bf8](https://github.com/folke/lazy.nvim/commit/a692bf86883457f45fe3f773bfc8bc4d9e4b070c)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index a52e23c..34e9ae3 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.13.2" + ".": "11.13.3" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 8094a59..9f4735d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.13.3](https://github.com/folke/lazy.nvim/compare/v11.13.2...v11.13.3) (2024-07-21) + + +### Reverts + +* fix(loader): add auto loaded module to package.loaded early to prevent require loops ([a692bf8](https://github.com/folke/lazy.nvim/commit/a692bf86883457f45fe3f773bfc8bc4d9e4b070c)) + ## [11.13.2](https://github.com/folke/lazy.nvim/compare/v11.13.1...v11.13.2) (2024-07-21) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 0029a30..ab07479 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -235,7 +235,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.13.2" -- x-release-please-version +M.version = "11.13.3" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 34b0126e5b3966f1dbe148d6f8450213115e76b2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 22 Jul 2024 09:43:09 +0200 Subject: [PATCH 756/815] fix(loader): add plugins whose rtp got loaded early to start plugins --- lua/lazy/core/loader.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index c5cdca2..323b57b 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -161,7 +161,7 @@ function M.get_start_plugins() ---@type LazyPlugin[] local start = {} for _, plugin in pairs(Config.plugins) do - if plugin.lazy == false and not plugin._.loaded then + if not plugin._.loaded and (plugin._.rtp_loaded or plugin.lazy == false) then start[#start + 1] = plugin end end From 12f2c74244cc768d97c83972aa63722389b5d96d Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 22 Jul 2024 09:45:01 +0200 Subject: [PATCH 757/815] fix(loader): explicitely set package.loaded.modname to nil to prevent recursive loading errors --- lua/lazy/core/loader.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 323b57b..cfcc136 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -552,6 +552,8 @@ function M.loader(modname) end if ret then + -- explicitly set to nil to prevent loading errors + package.loaded[modname] = nil M.auto_load(modname, ret.modpath) local mod = package.loaded[modname] if type(mod) == "table" then From 16a5c46aa3d05d37eb9c49f57ab058033b0870a6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 09:47:04 +0200 Subject: [PATCH 758/815] chore(main): release 11.13.4 (#1670) :robot: I have created a release *beep* *boop* --- ## [11.13.4](https://github.com/folke/lazy.nvim/compare/v11.13.3...v11.13.4) (2024-07-22) ### Bug Fixes * **loader:** add plugins whose rtp got loaded early to start plugins ([34b0126](https://github.com/folke/lazy.nvim/commit/34b0126e5b3966f1dbe148d6f8450213115e76b2)) * **loader:** explicitely set package.loaded.modname to nil to prevent recursive loading errors ([12f2c74](https://github.com/folke/lazy.nvim/commit/12f2c74244cc768d97c83972aa63722389b5d96d)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 34e9ae3..8c425b8 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.13.3" + ".": "11.13.4" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f4735d..21299f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [11.13.4](https://github.com/folke/lazy.nvim/compare/v11.13.3...v11.13.4) (2024-07-22) + + +### Bug Fixes + +* **loader:** add plugins whose rtp got loaded early to start plugins ([34b0126](https://github.com/folke/lazy.nvim/commit/34b0126e5b3966f1dbe148d6f8450213115e76b2)) +* **loader:** explicitely set package.loaded.modname to nil to prevent recursive loading errors ([12f2c74](https://github.com/folke/lazy.nvim/commit/12f2c74244cc768d97c83972aa63722389b5d96d)) + ## [11.13.3](https://github.com/folke/lazy.nvim/compare/v11.13.2...v11.13.3) (2024-07-21) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index ab07479..041778d 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -235,7 +235,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.13.3" -- x-release-please-version +M.version = "11.13.4" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From cc028e77eba9592818ca237b2079a51cf87b6af2 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 22 Jul 2024 14:24:40 +0200 Subject: [PATCH 759/815] ci: update --- .github/workflows/stale.yml | 3 ++- .github/workflows/update.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index a0c704b..4e0273b 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -5,6 +5,7 @@ on: - cron: "30 1 * * *" jobs: - ci: + stale: + if: contains(fromJSON('["folke", "LazyVim"]'), github.repository_owner) uses: folke/github/.github/workflows/stale.yml@main secrets: inherit diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index 2177a50..6784ef9 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -7,6 +7,7 @@ on: - cron: "0 * * * *" jobs: - ci: + update: + if: contains(fromJSON('["folke", "LazyVim"]'), github.repository_owner) uses: folke/github/.github/workflows/update.yml@main secrets: inherit From 7d29719ade6f5a269e3b7d08b246641b5b079aaa Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 22 Jul 2024 14:38:00 +0200 Subject: [PATCH 760/815] fix(health): dont use vim.fn.system to get cmd versions --- lua/lazy/health.lua | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lua/lazy/health.lua b/lua/lazy/health.lua index 9e2a869..6a6d60d 100644 --- a/lua/lazy/health.lua +++ b/lua/lazy/health.lua @@ -1,4 +1,5 @@ local Config = require("lazy.core.config") +local Process = require("lazy.manage.process") local uv = vim.uv or vim.loop local M = {} @@ -36,11 +37,11 @@ function M.have(cmd, opts) local found for _, c in ipairs(cmd) do if vim.fn.executable(c) == 1 then - local version = vim.fn.system(c .. " " .. opts.version) or "" - if vim.v.shell_error ~= 0 then - opts.error(("failed to get version of {%s}\n%s"):format(c, version)) + local out, exit_code = Process.exec({ c, opts.version }) + if exit_code ~= 0 then + opts.error(("failed to get version of {%s}\n%s"):format(c, table.concat(out, "\n"))) else - version = vim.trim(vim.split(version, "\n")[1]) + local version = vim.trim(out[1] or "") version = version:gsub("^%s*" .. vim.pesc(c) .. "%s*", "") if opts.version_pattern and not version:find(opts.version_pattern, 1, true) then opts.warn(("`%s` version `%s` needed, but found `%s`"):format(c, opts.version_pattern, version)) From 839f9e78e78dc935b1188fb16583365991739c51 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:41:58 +0200 Subject: [PATCH 761/815] chore(main): release 11.13.5 (#1672) :robot: I have created a release *beep* *boop* --- ## [11.13.5](https://github.com/folke/lazy.nvim/compare/v11.13.4...v11.13.5) (2024-07-22) ### Bug Fixes * **health:** dont use vim.fn.system to get cmd versions ([7d29719](https://github.com/folke/lazy.nvim/commit/7d29719ade6f5a269e3b7d08b246641b5b079aaa)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 8c425b8..73b8cd1 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.13.4" + ".": "11.13.5" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 21299f1..ed2bf2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.13.5](https://github.com/folke/lazy.nvim/compare/v11.13.4...v11.13.5) (2024-07-22) + + +### Bug Fixes + +* **health:** dont use vim.fn.system to get cmd versions ([7d29719](https://github.com/folke/lazy.nvim/commit/7d29719ade6f5a269e3b7d08b246641b5b079aaa)) + ## [11.13.4](https://github.com/folke/lazy.nvim/compare/v11.13.3...v11.13.4) (2024-07-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 041778d..e02ed0b 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -235,7 +235,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.13.4" -- x-release-please-version +M.version = "11.13.5" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From d5686efbd00942b3e38de7c08b8df69d961b02f0 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 23 Jul 2024 13:31:20 +0200 Subject: [PATCH 762/815] feat: added `opts.git.cooldown` to allow updating plugins on slow connections. Fixes #1656 --- lua/lazy/core/config.lua | 4 ++++ lua/lazy/manage/task/git.lua | 16 +++++++++++++++- lua/lazy/types.lua | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index e02ed0b..f5633b1 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -41,6 +41,10 @@ M.defaults = { rate = 2, duration = 5 * 1000, -- in ms }, + -- Time in seconds to wait before running fetch again for a plugin. + -- Repeated update/check operations will not run again until this + -- cooldown period has passed. + cooldown = 0, }, pkg = { enabled = true, diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index bd7ee38..c54c809 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -40,6 +40,15 @@ function throttle.wait() end end +---@param plugin LazyPlugin +local function cooldown(plugin) + if not plugin._.last_check then + return false + end + local delta = (vim.uv.now() - plugin._.last_check) / 1000 + return delta < Config.options.git.cooldown +end + ---@type table local M = {} @@ -266,7 +275,7 @@ M.status = { -- fetches all needed origin branches M.fetch = { skip = function(plugin) - return not plugin._.installed or plugin._.is_local + return not plugin._.installed or plugin._.is_local or cooldown(plugin) end, ---@async @@ -287,6 +296,11 @@ M.fetch = { self:spawn("git", { args = args, cwd = self.plugin.dir, + on_exit = function(ok) + if ok then + self.plugin._.last_check = vim.uv.now() + end + end, }) end, } diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 0a10467..5921169 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -20,6 +20,7 @@ ---@field tasks? LazyTask[] ---@field updated? {from:string, to:string} ---@field updates? {from:GitInfo, to:GitInfo} +---@field last_check? number ---@field working? boolean ---@field pkg? LazyPkg From c02268ac6e6aab92249d020d75efc588bd9d24fa Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 23 Jul 2024 17:24:33 +0200 Subject: [PATCH 763/815] feat(plugin): improve error handling and show better error message --- lua/lazy/core/plugin.lua | 41 ++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index d121fdf..1aef7c7 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -146,33 +146,43 @@ function Spec:import(spec) local imported = 0 - ---@type (string|(fun():LazyPluginSpec))[] + ---@type {modname: string, load: fun():(LazyPluginSpec?, string?)}[] local modspecs = {} if type(import) == "string" then Util.lsmod(import, function(modname, modpath) - modspecs[#modspecs + 1] = modname - package.preload[modname] = function() - return loadfile(modpath)() - end + modspecs[#modspecs + 1] = { + modname = modname, + load = function() + local mod, err = loadfile(modpath) + if mod then + return mod() + else + return nil, err + end + end, + } + end) + table.sort(modspecs, function(a, b) + return a.modname < b.modname end) - table.sort(modspecs) else - modspecs = { spec.import } + modspecs = { modname = import_name, load = spec.import } end for _, modspec in ipairs(modspecs) do imported = imported + 1 - local modname = type(modspec) == "string" and modspec or import_name + local modname = modspec.modname Util.track({ import = modname }) self.importing = modname -- unload the module so we get a clean slate ---@diagnostic disable-next-line: no-unknown package.loaded[modname] = nil Util.try(function() - local mod = type(modspec) == "function" and modspec() or require(modspec) - if type(mod) ~= "table" then - self.importing = nil + local mod, err = modspec.load() + if err then + self:error("Failed to load `" .. modname .. "`:\n" .. err) + elseif type(mod) ~= "table" then return self:error( "Invalid spec module: `" .. modname @@ -180,18 +190,17 @@ function Spec:import(spec) .. type(mod) .. "` was returned instead" ) + else + self:normalize(mod) end - self:normalize(mod) - self.importing = nil - Util.track() end, { msg = "Failed to load `" .. modname .. "`", on_error = function(msg) self:error(msg) - self.importing = nil - Util.track() end, }) + self.importing = nil + Util.track() end if imported == 0 then self:error("No specs found for module " .. spec.import) From b4a5a1209e4c64fa67aedf721a383541a64056d1 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 24 Jul 2024 07:23:36 +0200 Subject: [PATCH 764/815] fix(plugin): make .lazy.lua work again --- lua/lazy/core/plugin.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 1aef7c7..97347a7 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -167,7 +167,7 @@ function Spec:import(spec) return a.modname < b.modname end) else - modspecs = { modname = import_name, load = spec.import } + modspecs = { { modname = import_name, load = spec.import } } end for _, modspec in ipairs(modspecs) do @@ -203,7 +203,7 @@ function Spec:import(spec) Util.track() end if imported == 0 then - self:error("No specs found for module " .. spec.import) + self:error("No specs found for module " .. vim.inspect(spec.import)) end end From 4496b4cad69a862199bb3ad452d3c4988bb925a1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 07:38:49 +0200 Subject: [PATCH 765/815] chore(main): release 11.14.0 (#1673) :robot: I have created a release *beep* *boop* --- ## [11.14.0](https://github.com/folke/lazy.nvim/compare/v11.13.5...v11.14.0) (2024-07-24) ### Features * added `opts.git.cooldown` to allow updating plugins on slow connections. Fixes [#1656](https://github.com/folke/lazy.nvim/issues/1656) ([d5686ef](https://github.com/folke/lazy.nvim/commit/d5686efbd00942b3e38de7c08b8df69d961b02f0)) * **plugin:** improve error handling and show better error message ([c02268a](https://github.com/folke/lazy.nvim/commit/c02268ac6e6aab92249d020d75efc588bd9d24fa)) ### Bug Fixes * **plugin:** make .lazy.lua work again ([b4a5a12](https://github.com/folke/lazy.nvim/commit/b4a5a1209e4c64fa67aedf721a383541a64056d1)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 73b8cd1..ec03d72 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.13.5" + ".": "11.14.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index ed2bf2c..a67aea8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [11.14.0](https://github.com/folke/lazy.nvim/compare/v11.13.5...v11.14.0) (2024-07-24) + + +### Features + +* added `opts.git.cooldown` to allow updating plugins on slow connections. Fixes [#1656](https://github.com/folke/lazy.nvim/issues/1656) ([d5686ef](https://github.com/folke/lazy.nvim/commit/d5686efbd00942b3e38de7c08b8df69d961b02f0)) +* **plugin:** improve error handling and show better error message ([c02268a](https://github.com/folke/lazy.nvim/commit/c02268ac6e6aab92249d020d75efc588bd9d24fa)) + + +### Bug Fixes + +* **plugin:** make .lazy.lua work again ([b4a5a12](https://github.com/folke/lazy.nvim/commit/b4a5a1209e4c64fa67aedf721a383541a64056d1)) + ## [11.13.5](https://github.com/folke/lazy.nvim/compare/v11.13.4...v11.13.5) (2024-07-22) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index f5633b1..1a8dba7 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -239,7 +239,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.13.5" -- x-release-please-version +M.version = "11.14.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 7108809ab18dc1b1e6f402b29e2e1d35a5d311d5 Mon Sep 17 00:00:00 2001 From: Alexander Grebennik Date: Thu, 25 Jul 2024 12:53:01 +0200 Subject: [PATCH 766/815] fix(plugins): "Vim:E150: Not a directory" on plugin update (#1679) ## Description On plugins update it fails with following error for any plugin. ``` ~/.local/share/nvim/lazy/lazy.nvim/manage/task/plugin.lua:95: Vim:E150: Not a directory: ~/.local/share/nvim/lazy/gitsigns.nvim/doc/ ``` --- lua/lazy/manage/task/plugin.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index bd565f8..69a93a5 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -90,7 +90,7 @@ M.docs = { return not plugin._.dirty end, run = function(self) - local docs = self.plugin.dir .. "/doc/" + local docs = self.plugin.dir .. "/doc" if Util.file_exists(docs) then self:log(vim.api.nvim_cmd({ cmd = "helptags", args = { docs } }, { output = true })) end From 077102c5bfc578693f12377846d427f49bc50076 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 13:38:23 +0200 Subject: [PATCH 767/815] chore(main): release 11.14.1 (#1680) :robot: I have created a release *beep* *boop* --- ## [11.14.1](https://github.com/folke/lazy.nvim/compare/v11.14.0...v11.14.1) (2024-07-25) ### Bug Fixes * **plugins:** "Vim:E150: Not a directory" on plugin update ([#1679](https://github.com/folke/lazy.nvim/issues/1679)) ([7108809](https://github.com/folke/lazy.nvim/commit/7108809ab18dc1b1e6f402b29e2e1d35a5d311d5)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index ec03d72..fe56f44 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.14.0" + ".": "11.14.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index a67aea8..83a3375 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.14.1](https://github.com/folke/lazy.nvim/compare/v11.14.0...v11.14.1) (2024-07-25) + + +### Bug Fixes + +* **plugins:** "Vim:E150: Not a directory" on plugin update ([#1679](https://github.com/folke/lazy.nvim/issues/1679)) ([7108809](https://github.com/folke/lazy.nvim/commit/7108809ab18dc1b1e6f402b29e2e1d35a5d311d5)) + ## [11.14.0](https://github.com/folke/lazy.nvim/compare/v11.13.5...v11.14.0) (2024-07-24) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 1a8dba7..06719b9 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -239,7 +239,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.14.0" -- x-release-please-version +M.version = "11.14.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 014a72b7a87ccf56670412edb87a431b196e5864 Mon Sep 17 00:00:00 2001 From: Christoph Zirkelbach <31811+tigion@users.noreply.github.com> Date: Sat, 31 Aug 2024 08:57:58 +0200 Subject: [PATCH 768/815] docs: update dev.path description (#1711) ## Description In the issue (#1707) I was confused by the description of `dev.path`. I thought functions must also return the general directory for local plugins, but it must be the plugin directory. ## Related Issue(s) #1707 --- lua/lazy/core/config.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 06719b9..16cc012 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -67,7 +67,9 @@ M.defaults = { hererocks = nil, }, dev = { - ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects + -- Directory where you store your local plugin projects. If a function is used, + -- the plugin directory (e.g. `~/projects/plugin-name`) must be returned. + ---@type string | fun(plugin: LazyPlugin): string path = "~/projects", ---@type string[] plugins that match these patterns will use your local versions instead of being fetched from GitHub patterns = {}, -- For example {"folke"} From 80da254e645f579c28394ee0f08f75a9c9481744 Mon Sep 17 00:00:00 2001 From: Roger Kim Date: Sat, 31 Aug 2024 02:58:43 -0400 Subject: [PATCH 769/815] fix(rocks): add lib64 plugin directory to package.cpath (#1717) ## Description `package.cpath` is missing the `lib64` directory for plugins that have luarocks dependencies. ## Context I found this issue when I was working on my new Neovim plugin on my Fedora 39 machine. I added the `luasockets` dependency to rockspec file in my plugin like so: ``` rockspec_format = "3.0" package = "typeracer.nvim" version = "scm-1" source = { url = "git+https://github.com/carbon-steel/typeracer.nvim", } dependencies = { "luasocket", } test_dependencies = { "nlua", } build = { type = "builtin", copy_directories = {}, } ``` I found that the dynamic libraries from the `luasockets` dependency were installed like so: `/home/username/.local/share/nvim/lazy-rocks/typeracer.nvim/lib64/lua/5.1/socket/core.so`. However, the only entry related to my plugin `typeracer.nvim` was: `/home/glyph/.local/share/nvim/lazy-rocks/typeracer.nvim/lib/lua/5.1/?.so`. The issue is that we only have the plugin's `lib` directory in `package.cpath` and not `lib64`. I looked through `lazy.nvim`'s code and I think adding the `lib64` directory should fix the issue. I don't know if we also want to worry about `lib32` as well, but so far, this change works for me. --- lua/lazy/core/loader.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index cfcc136..c6a7271 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -493,8 +493,11 @@ function M.add_to_luapath(plugin) local root = Config.options.rocks.root .. "/" .. plugin.name local path = root .. "/share/lua/5.1" local cpath = root .. "/lib/lua/5.1" + local cpath2 = root .. "/lib64/lua/5.1" + package.path = package.path .. ";" .. path .. "/?.lua;" .. path .. "/?/init.lua;" package.cpath = package.cpath .. ";" .. cpath .. "/?." .. (jit.os:find("Windows") and "dll" or "so") .. ";" + package.cpath = package.cpath .. ";" .. cpath2 .. "/?." .. (jit.os:find("Windows") and "dll" or "so") .. ";" end function M.source(path) From 591ef40f2da3a26fbcc0466988cd6fe45ca68cae Mon Sep 17 00:00:00 2001 From: Marc Jakobi Date: Sat, 31 Aug 2024 13:59:45 +0700 Subject: [PATCH 770/815] fix(luarocks): try to install from root manifest (#1687) ## Description When passing the `--dev` flag to `luarocks`, it will prioritise `dev` versions when resolving dependencies (treating `dev` or `scm` as greater than a SemVer version) if the rockspec doesn't specify an upper version constraint (which is often the case). Dev packages are often unstable and may cause more problems, especially for Windows users (an example I've seen is git for windows trying and failing to checkout submodules). For now , a good compromise between too many retries and not retrying at all could be to try `luarocks install` from the root manifest first, but to keep the `--dev` flag in `luarocks make`. If that still causes problems, it might be better to fall back to `luarocks make` without `--dev` first, and then to try `luarocks ---dev make` as a last resort. In rocks.nvim, we only fall back to adding the `--dev` flag if the install error message contains the string `"No results matching query were found"`; assuming that stable non-dev packages shouldn't depend on dev packages. --- lua/lazy/pkg/rockspec.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index 19d580d..d7ecfdb 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -172,7 +172,6 @@ function M.build(task) root, "--server", Config.options.rocks.server, - "--dev", "--lua-version", "5.1", "install", -- use install so that we can make use of pre-built rocks From 48b52b5cfcf8f88ed0aff8fde573a5cc20b1306d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 31 Aug 2024 07:03:18 +0000 Subject: [PATCH 771/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 1496 +++++++++++++++++++++++++++-- 1 file changed, 1418 insertions(+), 78 deletions(-) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index 87b46dd..b91e678 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -10,27 +10,39 @@ return }, { name = "adopure.nvim", url = "Willem-J-an/adopure.nvim", - version = "1.1.0-1" + version = "1.1.2-1" }, { name = "aerial.nvim", url = "stevearc/aerial.nvim", - version = "1.7.0-1" + version = "2.2.0-1" }, { name = "ai.nvim", url = "S1M0N38/ai.nvim", version = "0.1.0-1" + }, { + name = "astral.nvim", + url = "rootiest/astral.nvim", + version = "1.0.9-1" }, { name = "auto-hlsearch.nvim", url = "asiryk/auto-hlsearch.nvim", version = "1.1.0-1" + }, { + name = "banana.nvim", + url = "CWood-sdf/banana.nvim", + version = "0.1.0-1" }, { name = "better-escape.nvim", url = "max397574/better-escape.nvim", - version = "1.0.0-1" + version = "2.3.2-1" }, { name = "bufferline.nvim", url = "akinsho/bufferline.nvim", - version = "4.6.1-1" + version = "4.7.0-1" + }, { + name = "care.nvim", + url = "max397574/care.nvim", + version = "0.1.0-1" }, { name = "ccc.nvim", url = "uga-rosa/ccc.nvim", @@ -39,6 +51,10 @@ return name = "ci-template.nvim", url = "linrongbin16/ci-template.nvim", version = "8.1.0-1" + }, { + name = "cinnamon.nvim", + url = "declancm/cinnamon.nvim", + version = "1.2.5-1" }, { name = "cmp-rg", url = "lukas-reineke/cmp-rg", @@ -70,11 +86,11 @@ return }, { name = "commons.nvim", url = "linrongbin16/commons.nvim", - version = "18.0.0-1" + version = "19.0.0-1" }, { name = "conform.nvim", url = "stevearc/conform.nvim", - version = "6.0.0-1" + version = "8.0.0-1" }, { name = "cybu.nvim", url = "ghillb/cybu.nvim", @@ -91,6 +107,10 @@ return name = "decipher.nvim", url = "MisanthropicBit/decipher.nvim", version = "1.0.1-1" + }, { + name = "delog.nvim", + url = "ej-shafran/delog.nvim", + version = "0.0.2-1" }, { name = "detour.nvim", url = "carbon-steel/detour.nvim", @@ -114,7 +134,7 @@ return }, { name = "dropbar.nvim", url = "Bekaboo/dropbar.nvim", - version = "8.4.0-1" + version = "8.6.1-1" }, { name = "duck.nvim", url = "tamton-aquib/duck.nvim", @@ -126,15 +146,19 @@ return }, { name = "edgy.nvim", url = "folke/edgy.nvim", - version = "1.9.1-1" + version = "1.10.2-1" + }, { + name = "efmls-configs-nvim", + url = "creativenull/efmls-configs-nvim", + version = "1.7.0-1" }, { name = "elixir-tools.nvim", url = "elixir-tools/elixir-tools.nvim", - version = "0.14.3-1" + version = "0.16.0-1" }, { name = "feline.nvim", url = "freddiehaddad/feline.nvim", - version = "1.6.2-1" + version = "1.6.3-1" }, { name = "fidget.nvim", url = "j-hui/fidget.nvim", @@ -142,7 +166,7 @@ return }, { name = "flash.nvim", url = "folke/flash.nvim", - version = "1.18.3-1" + version = "2.1.0-1" }, { name = "flatten.nvim", url = "willothy/flatten.nvim", @@ -150,11 +174,15 @@ return }, { name = "flutter-tools.nvim", url = "akinsho/flutter-tools.nvim", - version = "1.10.0-1" + version = "1.14.0-1" }, { name = "focus.nvim", url = "nvim-focus/focus.nvim", version = "1.0.2-1" + }, { + name = "foldtext.nvim", + url = "OXY2DEV/foldtext.nvim", + version = "1.0.0-1" }, { name = "freeze-code.nvim", url = "AlejandroSuero/freeze-code.nvim", @@ -162,7 +190,7 @@ return }, { name = "fugit2.nvim", url = "SuperBo/fugit2.nvim", - version = "0.2.0-1" + version = "0.2.1-1" }, { name = "funnyfiles.nvim", url = "aikooo7/funnyfiles.nvim", @@ -182,7 +210,11 @@ return }, { name = "git-worktree.nvim", url = "polarmutex/git-worktree.nvim", - version = "1.0.0-1" + version = "2.0.1-1" + }, { + name = "git.nvim", + url = "Kibadda/git.nvim", + version = "3.3.1-1" }, { name = "github-nvim-theme", url = "projekt0n/github-nvim-theme", @@ -191,10 +223,6 @@ return name = "gitlinker.nvim", url = "linrongbin16/gitlinker.nvim", version = "4.13.1-1" - }, { - name = "gitsigns.nvim", - url = "lewis6991/gitsigns.nvim", - version = "scm-1" }, { name = "glow.nvim", url = "ellisonleao/glow.nvim", @@ -202,7 +230,7 @@ return }, { name = "go.nvim", url = "ray-x/go.nvim", - version = "0.2.1-1" + version = "0.9.0-1" }, { name = "godo.nvim", url = "arthuradolfo/godo.nvim", @@ -215,6 +243,10 @@ return name = "gruvbox.nvim", url = "ellisonleao/gruvbox.nvim", version = "2.0.0-1" + }, { + name = "hardhat.nvim", + url = "TheSnakeWitcher/hardhat.nvim", + version = "0.1.0-1" }, { name = "haskell-snippets.nvim", url = "mrcjkb/haskell-snippets.nvim", @@ -222,7 +254,7 @@ return }, { name = "haskell-tools.nvim", url = "mrcjkb/haskell-tools.nvim", - version = "3.1.10-1" + version = "4.0.1-1" }, { name = "headlines.nvim", url = "lukas-reineke/headlines.nvim", @@ -231,6 +263,14 @@ return name = "heirline.nvim", url = "rebelot/heirline.nvim", version = "1.0.6-1" + }, { + name = "helpview.nvim", + url = "OXY2DEV/helpview.nvim", + version = "1.1.0-1" + }, { + name = "hibiscus.nvim", + url = "udayvir-singh/hibiscus.nvim", + version = "1.7-1" }, { name = "hlchunk.nvim", url = "shellRaining/hlchunk.nvim", @@ -238,7 +278,11 @@ return }, { name = "hotpot.nvim", url = "rktjmp/hotpot.nvim", - version = "0.12.1-1" + version = "0.14.3-1" + }, { + name = "hurl.nvim", + url = "jellydn/hurl.nvim", + version = "1.7.0-1" }, { name = "hydra.nvim", url = "nvimtools/hydra.nvim", @@ -254,7 +298,7 @@ return }, { name = "indent-blankline.nvim", url = "lukas-reineke/indent-blankline.nvim", - version = "3.6.3-1" + version = "3.7.2-1" }, { name = "kai.nvim", url = "Kamilcuk/kai.nvim", @@ -262,7 +306,15 @@ return }, { name = "lazy.nvim", url = "folke/lazy.nvim", - version = "11.2.1-1" + version = "11.14.1-1" + }, { + name = "lazydev.nvim", + url = "folke/lazydev.nvim", + version = "1.8.0-1" + }, { + name = "lean.nvim", + url = "Julian/lean.nvim", + version = "1.0.0-1" }, { name = "leetcode.nvim", url = "kawre/leetcode.nvim", @@ -275,6 +327,10 @@ return name = "live-command.nvim", url = "smjonas/live-command.nvim", version = "1.2.1-1" + }, { + name = "logger.nvim", + url = "jnpngshiii/logger.nvim", + version = "0.4.6-1" }, { name = "logging.nvim", url = "NTBBloodbath/logging.nvim", @@ -283,10 +339,14 @@ return name = "love2d.nvim", url = "S1M0N38/love2d.nvim", version = "0.2-1" + }, { + name = "lsp-format.nvim", + url = "lukas-reineke/lsp-format.nvim", + version = "2.7.1-1" }, { name = "lsp-progress.nvim", url = "linrongbin16/lsp-progress.nvim", - version = "1.0.12-1" + version = "1.0.13-1" }, { name = "lsp_signature.nvim", url = "ray-x/lsp_signature.nvim", @@ -310,23 +370,39 @@ return }, { name = "luarocks-build-treesitter-parser", url = "nvim-neorocks/luarocks-build-treesitter-parser", - version = "4.1.0-1" + version = "5.0.2-1" + }, { + name = "luarocks-build-treesitter-parser-cpp", + url = "nvim-neorocks/luarocks-build-treesitter-parser-cpp", + version = "2.0.4-1" }, { name = "mapx.nvim", url = "b0o/mapx.nvim", version = "0.2.1-1" + }, { + name = "markdown.nvim", + url = "MeanderingProgrammer/render-markdown.nvim", + version = "5.0.1-1" + }, { + name = "markview.nvim", + url = "OXY2DEV/markview.nvim", + version = "22.0.1-1" }, { name = "mason-lspconfig.nvim", url = "williamboman/mason-lspconfig.nvim", - version = "1.29.0-1" + version = "1.30.0-1" }, { name = "mason-nvim-dap.nvim", url = "jay-babu/mason-nvim-dap.nvim", - version = "2.3.0-1" + version = "2.4.0-1" }, { name = "mason.nvim", url = "williamboman/mason.nvim", version = "1.10.0-1" + }, { + name = "mindmap.nvim", + url = "jnpngshiii/mindmap.nvim", + version = "0.7.1-1" }, { name = "mini.nvim", url = "echasnovski/mini.nvim", @@ -334,7 +410,7 @@ return }, { name = "mkdnflow.nvim", url = "jakewvincent/mkdnflow.nvim", - version = "1.2.0-1" + version = "1.2.4-1" }, { name = "move.nvim", url = "fedepujol/move.nvim", @@ -342,7 +418,7 @@ return }, { name = "multicursors.nvim", url = "smoka7/multicursors.nvim", - version = "1.0.0-1" + version = "2.0.0-1" }, { name = "my-awesome-plugin.nvim", url = "S1M0N38/my-awesome-plugin.nvim", @@ -358,7 +434,7 @@ return }, { name = "neoconf.nvim", url = "folke/neoconf.nvim", - version = "1.2.2-1" + version = "1.3.2-1" }, { name = "neodev.nvim", url = "folke/neodev.nvim", @@ -366,7 +442,7 @@ return }, { name = "neogen", url = "danymat/neogen", - version = "2.17.1-1" + version = "2.19.4-1" }, { name = "neogit", url = "NeogitOrg/neogit", @@ -374,11 +450,27 @@ return }, { name = "neorg", url = "nvim-neorg/neorg", - version = "8.7.1-1" + version = "9.1.1-1" + }, { + name = "neorg-conceal-wrap", + url = "benlubas/neorg-conceal-wrap", + version = "1.0.0-1" + }, { + name = "neorg-interim-ls", + url = "benlubas/neorg-interim-ls", + version = "1.2.0-1" + }, { + name = "neorg-se", + url = "benlubas/neorg-se", + version = "1.1.10-1" }, { name = "neorg-telescope", url = "nvim-neorg/neorg-telescope", - version = "1.1.0-1" + version = "1.2.2-1" + }, { + name = "neorg-worklog", + url = "bottd/neorg-worklog", + version = "1.3.4-1" }, { name = "neoscroll.nvim", url = "karb94/neoscroll.nvim", @@ -386,27 +478,43 @@ return }, { name = "neotest", url = "nvim-neotest/neotest", - version = "5.3.3-1" + version = "5.4.1-1" + }, { + name = "neotest-busted", + url = "MisanthropicBit/neotest-busted", + version = "0.1.0-1" + }, { + name = "neotest-golang", + url = "fredrikaverpil/neotest-golang", + version = "1.0.0-1" }, { name = "neotest-haskell", url = "mrcjkb/neotest-haskell", - version = "2.0.0-1" + version = "2.1.0-1" + }, { + name = "neotest-java", + url = "rcasia/neotest-java", + version = "0.14.1-1" + }, { + name = "netman.nvim", + url = "miversen33/netman.nvim", + version = "1.15-1" }, { name = "nightfox.nvim", url = "EdenEast/nightfox.nvim", - version = "3.9.3-1" + version = "3.10.0-1" }, { name = "no-neck-pain.nvim", url = "shortcuts/no-neck-pain.nvim", - version = "1.14.0-1" + version = "1.16.0-1" }, { name = "noice.nvim", url = "folke/noice.nvim", - version = "4.3.0-1" + version = "4.5.0-1" }, { name = "npackages.nvim", url = "diegofigs/npackages.nvim", - version = "0.1.0-1" + version = "0.3.0-1" }, { name = "nui-components.nvim", url = "grapp-dev/nui-components.nvim", @@ -415,6 +523,10 @@ return name = "nui.nvim", url = "MunifTanjim/nui.nvim", version = "0.3.0-1" + }, { + name = "nvim-bqf", + url = "kevinhwang91/nvim-bqf", + version = "1.1.1-1" }, { name = "nvim-client", url = "neovim/lua-client", @@ -423,10 +535,6 @@ return name = "nvim-client-proxy", url = "hjdivad/nvim-client-proxy", version = "0.1.0-1" - }, { - name = "nvim-cmp", - url = "hrsh7th/nvim-cmp", - version = "0.0.1-2" }, { name = "nvim-cokeline", url = "willothy/nvim-cokeline", @@ -442,7 +550,7 @@ return }, { name = "nvim-dbee", url = "kndndrj/nvim-dbee", - version = "0.1.6-1" + version = "0.1.9-1" }, { name = "nvim-dev-container", url = "esensar/nvim-dev-container", @@ -486,7 +594,7 @@ return }, { name = "nvim-nio", url = "nvim-neotest/nvim-nio", - version = "1.9.4-1" + version = "1.10.0-1" }, { name = "nvim-notify", url = "rcarriga/nvim-notify", @@ -502,15 +610,19 @@ return }, { name = "nvim-possession", url = "gennaro-tedesco/nvim-possession", - version = "0.0.13-1" + version = "0.0.14-1" }, { name = "nvim-scrollview", url = "dstein64/nvim-scrollview", - version = "5.1.0-1" + version = "5.2.1-1" }, { name = "nvim-smuggler", url = "Klafyvel/nvim-smuggler", - version = "main-1" + version = "0.3.0-1" + }, { + name = "nvim-snippets", + url = "garymjr/nvim-snippets", + version = "1.0.0-1" }, { name = "nvim-snippy", url = "dcampos/nvim-snippy", @@ -522,7 +634,7 @@ return }, { name = "nvim-tree.lua", url = "nvim-tree/nvim-tree.lua", - version = "1.4.0-1" + version = "1.6.0-1" }, { name = "nvim-treesitter-legacy-api", url = "nvim-treesitter/nvim-treesitter", @@ -535,18 +647,22 @@ return name = "nvim-web-devicons", url = "nvim-tree/nvim-web-devicons", version = "0.100-1" + }, { + name = "nvim-window-picker", + url = "s1n7ax/nvim-window-picker", + version = "2.0.3-1" }, { name = "obsidian.nvim", url = "epwalsh/obsidian.nvim", - version = "3.8.0-1" + version = "3.9.0-1" }, { name = "oil.nvim", url = "stevearc/oil.nvim", - version = "2.10.0-1" + version = "2.12.1-1" }, { name = "onedarkpro.nvim", url = "olimorris/onedarkpro.nvim", - version = "0.8.0-1" + version = "1.0.0-1" }, { name = "onenord.nvim", url = "rmehri01/onenord.nvim", @@ -554,7 +670,7 @@ return }, { name = "otter.nvim", url = "jmbuhr/otter.nvim", - version = "1.15.1-1" + version = "2.5.0-1" }, { name = "overseer.nvim", url = "stevearc/overseer.nvim", @@ -574,7 +690,7 @@ return }, { name = "papis.nvim", url = "jghauser/papis.nvim", - version = "0.5.1-1" + version = "0.6.1-1" }, { name = "paq-nvim", url = "savq/paq-nvim", @@ -582,11 +698,15 @@ return }, { name = "pathlib.nvim", url = "pysan3/pathlib.nvim", - version = "2.2.2-1" + version = "2.2.3-1" + }, { + name = "persisted.nvim", + url = "olimorris/persisted.nvim", + version = "1.1.0-1" }, { name = "persistence.nvim", url = "folke/persistence.nvim", - version = "2.0.0-1" + version = "3.1.0-1" }, { name = "plenary.nvim", url = "nvim-lua/plenary.nvim", @@ -595,42 +715,66 @@ return name = "pretty-fold.nvim", url = "anuvyklack/pretty-fold.nvim", version = "3.0-1" + }, { + name = "quarry.nvim", + url = "rudionrails/quarry.nvim", + version = "2.3.0-1" + }, { + name = "quicker.nvim", + url = "stevearc/quicker.nvim", + version = "1.1.1-1" }, { name = "rainbow-delimiters.nvim", url = "HiPhish/rainbow-delimiters.nvim", - version = "0.4.0-1" + version = "0.6.1-1" + }, { + name = "remember.nvim", + url = "vladdoster/remember.nvim", + version = "1.4.1-1" }, { name = "renamer.nvim", url = "filipdutescu/renamer.nvim", version = "5.1.0-1" + }, { + name = "render-markdown.nvim", + url = "MeanderingProgrammer/render-markdown.nvim", + version = "6.3.0-1" }, { name = "rest.nvim", url = "rest-nvim/rest.nvim", - version = "2.0.1-1" + version = "3.2.1-1" }, { name = "rocks-config.nvim", url = "nvim-neorocks/rocks-config.nvim", - version = "2.1.0-1" + version = "2.2.0-1" }, { name = "rocks-dev.nvim", url = "nvim-neorocks/rocks-dev.nvim", - version = "1.2.3-1" + version = "1.5.0-1" }, { name = "rocks-git.nvim", url = "nvim-neorocks/rocks-git.nvim", - version = "1.5.1-1" + version = "2.0.1-1" + }, { + name = "rocks-lazy.nvim", + url = "nvim-neorocks/rocks-lazy.nvim", + version = "1.0.1-1" + }, { + name = "rocks-treesitter.nvim", + url = "nvim-neorocks/rocks-treesitter.nvim", + version = "1.1.1-1" }, { name = "rocks.nvim", url = "nvim-neorocks/rocks.nvim", - version = "2.32.0-1" + version = "2.38.2-1" }, { name = "rtp.nvim", url = "nvim-neorocks/rtp.nvim", - version = "1.0.0-1" + version = "1.2.0-1" }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "4.25.1-1" + version = "5.2.2-1" }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", @@ -638,7 +782,7 @@ return }, { name = "screenkey.nvim", url = "NStefan002/screenkey.nvim", - version = "2.1.0-1" + version = "2.2.1-1" }, { name = "scrollbar.nvim", url = "Xuyuanp/scrollbar.nvim", @@ -646,7 +790,11 @@ return }, { name = "session.nvim", url = "Kibadda/session.nvim", - version = "2.0.0-1" + version = "3.0.0-1" + }, { + name = "sf.nvim", + url = "xixiaofinland/sf.nvim", + version = "1.5.0-1" }, { name = "sg.nvim", url = "sourcegraph/sg.nvim", @@ -654,7 +802,7 @@ return }, { name = "smart-splits.nvim", url = "mrjones2014/smart-splits.nvim", - version = "1.5.0-1" + version = "1.6.0-1" }, { name = "squirrel.nvim", url = "xiaoshihou514/squirrel.nvim", @@ -671,14 +819,22 @@ return name = "substitute.nvim", url = "gbprod/substitute.nvim", version = "2.0.0-1" + }, { + name = "sus.nvim", + url = "TarunDaCoder/sus.nvim", + version = "1.0.0-1" }, { name = "sweetie.nvim", url = "NTBBloodbath/sweetie.nvim", - version = "3.1.1-1" + version = "3.2.0-1" }, { name = "tabby.nvim", url = "nanozuki/tabby.nvim", version = "2.5.1-1" + }, { + name = "tangerine.nvim", + url = "udayvir-singh/tangerine.nvim", + version = "2.9-1" }, { name = "telescope-zf-native.nvim", url = "natecraddock/telescope-zf-native.nvim", @@ -690,35 +846,1215 @@ return }, { name = "todo-comments.nvim", url = "folke/todo-comments.nvim", - version = "1.2.0-1" + version = "1.3.0-1" }, { name = "toggleterm.nvim", url = "akinsho/toggleterm.nvim", - version = "2.11.0-1" + version = "2.12.0-1" }, { name = "tokyonight.nvim", url = "folke/tokyonight.nvim", - version = "3.0.1-1" + version = "4.8.0-1" + }, { + name = "tree-sitter-ada", + url = "briot/tree-sitter-ada", + version = "0.0.2-1" + }, { + name = "tree-sitter-agda", + url = "tree-sitter/tree-sitter-agda", + version = "0.0.2-1" + }, { + name = "tree-sitter-angular", + url = "dlvandenberg/tree-sitter-angular", + version = "0.0.3-1" + }, { + name = "tree-sitter-apex", + url = "aheber/tree-sitter-sfapex", + version = "0.0.3-1" + }, { + name = "tree-sitter-arduino", + url = "tree-sitter-grammars/tree-sitter-arduino", + version = "0.0.2-1" + }, { + name = "tree-sitter-asm", + url = "RubixDev/tree-sitter-asm", + version = "0.0.3-1" + }, { + name = "tree-sitter-astro", + url = "virchau13/tree-sitter-astro", + version = "0.0.2-1" + }, { + name = "tree-sitter-authzed", + url = "mleonidas/tree-sitter-authzed", + version = "0.0.2-1" + }, { + name = "tree-sitter-awk", + url = "Beaglefoot/tree-sitter-awk", + version = "0.0.2-1" + }, { + name = "tree-sitter-bash", + url = "tree-sitter/tree-sitter-bash", + version = "0.0.2-1" + }, { + name = "tree-sitter-bass", + url = "vito/tree-sitter-bass", + version = "0.0.2-1" + }, { + name = "tree-sitter-beancount", + url = "polarmutex/tree-sitter-beancount", + version = "0.0.3-1" + }, { + name = "tree-sitter-bibtex", + url = "latex-lsp/tree-sitter-bibtex", + version = "0.0.2-1" + }, { + name = "tree-sitter-bicep", + url = "tree-sitter-grammars/tree-sitter-bicep", + version = "0.0.2-1" + }, { + name = "tree-sitter-bitbake", + url = "tree-sitter-grammars/tree-sitter-bitbake", + version = "0.0.2-1" + }, { + name = "tree-sitter-blueprint", + url = "https://gitlab.com/gabmus/tree-sitter-blueprint/-/archive/60ba73739c6083c693d86a1a7cf039c07eb4ed59.zip", + version = "0.0.2-1" + }, { + name = "tree-sitter-bp", + url = "ambroisie/tree-sitter-bp", + version = "0.0.2-1" + }, { + name = "tree-sitter-c", + url = "tree-sitter/tree-sitter-c", + version = "0.0.3-1" + }, { + name = "tree-sitter-c_sharp", + url = "tree-sitter/tree-sitter-c-sharp", + version = "0.0.2-1" + }, { + name = "tree-sitter-cairo", + url = "tree-sitter-grammars/tree-sitter-cairo", + version = "0.0.2-1" + }, { + name = "tree-sitter-capnp", + url = "tree-sitter-grammars/tree-sitter-capnp", + version = "0.0.2-1" + }, { + name = "tree-sitter-chatito", + url = "tree-sitter-grammars/tree-sitter-chatito", + version = "0.0.2-1" + }, { + name = "tree-sitter-clojure", + url = "sogaiu/tree-sitter-clojure", + version = "0.0.2-1" + }, { + name = "tree-sitter-cmake", + url = "uyha/tree-sitter-cmake", + version = "0.0.2-1" + }, { + name = "tree-sitter-comment", + url = "stsewd/tree-sitter-comment", + version = "0.0.3-1" + }, { + name = "tree-sitter-commonlisp", + url = "tree-sitter-grammars/tree-sitter-commonlisp", + version = "0.0.2-1" + }, { + name = "tree-sitter-cooklang", + url = "addcninblue/tree-sitter-cooklang", + version = "0.0.2-1" + }, { + name = "tree-sitter-corn", + url = "jakestanger/tree-sitter-corn", + version = "0.0.2-1" + }, { + name = "tree-sitter-cpon", + url = "tree-sitter-grammars/tree-sitter-cpon", + version = "0.0.2-1" + }, { + name = "tree-sitter-cpp", + url = "tree-sitter/tree-sitter-cpp", + version = "0.0.3-1" + }, { + name = "tree-sitter-css", + url = "tree-sitter/tree-sitter-css", + version = "0.0.3-1" + }, { + name = "tree-sitter-csv", + url = "tree-sitter-grammars/tree-sitter-csv", + version = "0.0.2-1" + }, { + name = "tree-sitter-cuda", + url = "tree-sitter-grammars/tree-sitter-cuda", + version = "0.0.3-1" + }, { + name = "tree-sitter-cue", + url = "eonpatapon/tree-sitter-cue", + version = "0.0.2-1" + }, { + name = "tree-sitter-d", + url = "gdamore/tree-sitter-d", + version = "0.0.3-1" + }, { + name = "tree-sitter-dart", + url = "UserNobody14/tree-sitter-dart", + version = "0.0.3-1" + }, { + name = "tree-sitter-devicetree", + url = "joelspadin/tree-sitter-devicetree", + version = "0.0.3-1" + }, { + name = "tree-sitter-dhall", + url = "jbellerb/tree-sitter-dhall", + version = "0.0.2-1" + }, { + name = "tree-sitter-diff", + url = "the-mikedavis/tree-sitter-diff", + version = "0.0.2-1" + }, { + name = "tree-sitter-disassembly", + url = "ColinKennedy/tree-sitter-disassembly", + version = "0.0.2-1" + }, { + name = "tree-sitter-djot", + url = "treeman/tree-sitter-djot", + version = "0.0.2-1" + }, { + name = "tree-sitter-dockerfile", + url = "camdencheek/tree-sitter-dockerfile", + version = "0.0.2-1" + }, { + name = "tree-sitter-dot", + url = "rydesun/tree-sitter-dot", + version = "0.0.2-1" + }, { + name = "tree-sitter-doxygen", + url = "tree-sitter-grammars/tree-sitter-doxygen", + version = "0.0.2-1" + }, { + name = "tree-sitter-dtd", + url = "tree-sitter-grammars/tree-sitter-xml", + version = "0.0.2-1" + }, { + name = "tree-sitter-earthfile", + url = "glehmann/tree-sitter-earthfile", + version = "0.0.2-1" + }, { + name = "tree-sitter-ebnf", + url = "RubixDev/ebnf", + version = "0.0.2-1" + }, { + name = "tree-sitter-ecma", + url = "nvim-neorocks/luarocks-stub", + version = "0.0.2-1" + }, { + name = "tree-sitter-editorconfig", + url = "ValdezFOmar/tree-sitter-editorconfig", + version = "0.0.4-1" + }, { + name = "tree-sitter-eds", + url = "uyha/tree-sitter-eds", + version = "0.0.2-1" + }, { + name = "tree-sitter-eex", + url = "connorlay/tree-sitter-eex", + version = "0.0.2-1" + }, { + name = "tree-sitter-elixir", + url = "elixir-lang/tree-sitter-elixir", + version = "0.0.2-1" + }, { + name = "tree-sitter-elm", + url = "elm-tooling/tree-sitter-elm", + version = "0.0.2-1" + }, { + name = "tree-sitter-elsa", + url = "glapa-grossklag/tree-sitter-elsa", + version = "0.0.2-1" + }, { + name = "tree-sitter-elvish", + url = "elves/tree-sitter-elvish", + version = "0.0.2-1" + }, { + name = "tree-sitter-embedded_template", + url = "tree-sitter/tree-sitter-embedded-template", + version = "0.0.3-1" + }, { + name = "tree-sitter-erlang", + url = "WhatsApp/tree-sitter-erlang", + version = "0.0.3-1" + }, { + name = "tree-sitter-facility", + url = "FacilityApi/tree-sitter-facility", + version = "0.0.2-1" + }, { + name = "tree-sitter-faust", + url = "khiner/tree-sitter-faust", + version = "0.0.2-1" + }, { + name = "tree-sitter-fennel", + url = "alexmozaidze/tree-sitter-fennel", + version = "0.0.2-1" + }, { + name = "tree-sitter-fidl", + url = "google/tree-sitter-fidl", + version = "0.0.2-1" + }, { + name = "tree-sitter-firrtl", + url = "tree-sitter-grammars/tree-sitter-firrtl", + version = "0.0.2-1" + }, { + name = "tree-sitter-fish", + url = "ram02z/tree-sitter-fish", + version = "0.0.2-1" + }, { + name = "tree-sitter-foam", + url = "FoamScience/tree-sitter-foam", + version = "0.0.2-1" + }, { + name = "tree-sitter-forth", + url = "AlexanderBrevig/tree-sitter-forth", + version = "0.0.2-1" + }, { + name = "tree-sitter-fortran", + url = "stadelmanma/tree-sitter-fortran", + version = "0.0.4-1" + }, { + name = "tree-sitter-fsh", + url = "mgramigna/tree-sitter-fsh", + version = "0.0.2-1" + }, { + name = "tree-sitter-func", + url = "tree-sitter-grammars/tree-sitter-func", + version = "0.0.2-1" + }, { + name = "tree-sitter-fusion", + url = "https://gitlab.com/jirgn/tree-sitter-fusion/-/archive/19db2f47ba4c3a0f6238d4ae0e2abfca16e61dd6.zip", + version = "0.0.2-1" + }, { + name = "tree-sitter-gdscript", + url = "PrestonKnopp/tree-sitter-gdscript", + version = "0.0.2-1" + }, { + name = "tree-sitter-gdshader", + url = "GodOfAvacyn/tree-sitter-gdshader", + version = "0.0.2-1" + }, { + name = "tree-sitter-git_config", + url = "the-mikedavis/tree-sitter-git-config", + version = "0.0.2-1" + }, { + name = "tree-sitter-git_rebase", + url = "the-mikedavis/tree-sitter-git-rebase", + version = "0.0.3-1" + }, { + name = "tree-sitter-gitattributes", + url = "tree-sitter-grammars/tree-sitter-gitattributes", + version = "0.0.2-1" + }, { + name = "tree-sitter-gitcommit", + url = "gbprod/tree-sitter-gitcommit", + version = "0.0.2-1" + }, { + name = "tree-sitter-gitignore", + url = "shunsambongi/tree-sitter-gitignore", + version = "0.0.2-1" + }, { + name = "tree-sitter-gleam", + url = "gleam-lang/tree-sitter-gleam", + version = "0.0.3-1" + }, { + name = "tree-sitter-glimmer", + url = "alexlafroscia/tree-sitter-glimmer", + version = "0.0.3-1" + }, { + name = "tree-sitter-glsl", + url = "tree-sitter-grammars/tree-sitter-glsl", + version = "0.0.3-1" + }, { + name = "tree-sitter-gn", + url = "tree-sitter-grammars/tree-sitter-gn", + version = "0.0.2-1" + }, { + name = "tree-sitter-gnuplot", + url = "dpezto/tree-sitter-gnuplot", + version = "0.0.2-1" + }, { + name = "tree-sitter-go", + url = "tree-sitter/tree-sitter-go", + version = "0.0.3-1" + }, { + name = "tree-sitter-goctl", + url = "chaozwn/tree-sitter-goctl", + version = "0.0.3-1" + }, { + name = "tree-sitter-godot_resource", + url = "PrestonKnopp/tree-sitter-godot-resource", + version = "0.0.2-1" + }, { + name = "tree-sitter-gomod", + url = "camdencheek/tree-sitter-go-mod", + version = "0.0.3-1" + }, { + name = "tree-sitter-gosum", + url = "tree-sitter-grammars/tree-sitter-go-sum", + version = "0.0.2-1" + }, { + name = "tree-sitter-gotmpl", + url = "ngalaiko/tree-sitter-go-template", + version = "0.0.3-1" + }, { + name = "tree-sitter-gowork", + url = "omertuc/tree-sitter-go-work", + version = "0.0.2-1" + }, { + name = "tree-sitter-gpg", + url = "tree-sitter-grammars/tree-sitter-gpg-config", + version = "0.0.2-1" + }, { + name = "tree-sitter-graphql", + url = "bkegley/tree-sitter-graphql", + version = "0.0.2-1" + }, { + name = "tree-sitter-groovy", + url = "murtaza64/tree-sitter-groovy", + version = "0.0.3-1" + }, { + name = "tree-sitter-gstlaunch", + url = "tree-sitter-grammars/tree-sitter-gstlaunch", + version = "0.0.2-1" + }, { + name = "tree-sitter-hack", + url = "slackhq/tree-sitter-hack", + version = "0.0.2-1" + }, { + name = "tree-sitter-hare", + url = "tree-sitter-grammars/tree-sitter-hare", + version = "0.0.2-1" + }, { + name = "tree-sitter-haskell", + url = "tree-sitter/tree-sitter-haskell", + version = "0.0.2-1" + }, { + name = "tree-sitter-haskell_persistent", + url = "MercuryTechnologies/tree-sitter-haskell-persistent", + version = "0.0.2-1" + }, { + name = "tree-sitter-hcl", + url = "tree-sitter-grammars/tree-sitter-hcl", + version = "0.0.2-1" + }, { + name = "tree-sitter-heex", + url = "connorlay/tree-sitter-heex", + version = "0.0.3-1" + }, { + name = "tree-sitter-helm", + url = "ngalaiko/tree-sitter-go-template", + version = "0.0.3-1" + }, { + name = "tree-sitter-hjson", + url = "winston0410/tree-sitter-hjson", + version = "0.0.2-1" + }, { + name = "tree-sitter-hlsl", + url = "tree-sitter-grammars/tree-sitter-hlsl", + version = "0.0.3-1" + }, { + name = "tree-sitter-hlsplaylist", + url = "Freed-Wu/tree-sitter-hlsplaylist", + version = "0.0.3-1" + }, { + name = "tree-sitter-hocon", + url = "antosha417/tree-sitter-hocon", + version = "0.0.2-1" + }, { + name = "tree-sitter-hoon", + url = "urbit-pilled/tree-sitter-hoon", + version = "0.0.2-1" + }, { + name = "tree-sitter-html", + url = "tree-sitter/tree-sitter-html", + version = "0.0.3-1" + }, { + name = "tree-sitter-html_tags", + url = "nvim-neorocks/luarocks-stub", + version = "0.0.2-1" + }, { + name = "tree-sitter-htmldjango", + url = "interdependence/tree-sitter-htmldjango", + version = "0.0.2-1" + }, { + name = "tree-sitter-http", + url = "rest-nvim/tree-sitter-http", + version = "0.0.3-1" + }, { + name = "tree-sitter-hurl", + url = "pfeiferj/tree-sitter-hurl", + version = "0.0.3-1" + }, { + name = "tree-sitter-hyprlang", + url = "tree-sitter-grammars/tree-sitter-hyprlang", + version = "0.0.2-1" + }, { + name = "tree-sitter-idl", + url = "cathaysia/tree-sitter-idl", + version = "0.0.3-1" + }, { + name = "tree-sitter-ini", + url = "justinmk/tree-sitter-ini", + version = "0.0.3-1" + }, { + name = "tree-sitter-inko", + url = "inko-lang/tree-sitter-inko", + version = "0.0.2-1" + }, { + name = "tree-sitter-ispc", + url = "tree-sitter-grammars/tree-sitter-ispc", + version = "0.0.2-1" + }, { + name = "tree-sitter-janet_simple", + url = "sogaiu/tree-sitter-janet-simple", + version = "0.0.3-1" + }, { + name = "tree-sitter-java", + url = "tree-sitter/tree-sitter-java", + version = "0.0.3-1" + }, { + name = "tree-sitter-javascript", + url = "tree-sitter/tree-sitter-javascript", + version = "0.0.3-1" + }, { + name = "tree-sitter-jq", + url = "flurie/tree-sitter-jq", + version = "0.0.2-1" + }, { + name = "tree-sitter-jsdoc", + url = "tree-sitter/tree-sitter-jsdoc", + version = "0.0.2-1" + }, { + name = "tree-sitter-json", + url = "tree-sitter/tree-sitter-json", + version = "0.0.3-1" + }, { + name = "tree-sitter-json5", + url = "Joakker/tree-sitter-json5", + version = "0.0.2-1" + }, { + name = "tree-sitter-jsonc", + url = "https://gitlab.com/WhyNotHugo/tree-sitter-jsonc/-/archive/02b01653c8a1c198ae7287d566efa86a135b30d5.zip", + version = "0.0.2-1" + }, { + name = "tree-sitter-jsonnet", + url = "sourcegraph/tree-sitter-jsonnet", + version = "0.0.4-1" + }, { + name = "tree-sitter-jsx", + url = "nvim-neorocks/luarocks-stub", + version = "0.0.2-1" + }, { + name = "tree-sitter-julia", + url = "tree-sitter/tree-sitter-julia", + version = "0.0.3-1" + }, { + name = "tree-sitter-just", + url = "IndianBoy42/tree-sitter-just", + version = "0.0.3-1" + }, { + name = "tree-sitter-kconfig", + url = "tree-sitter-grammars/tree-sitter-kconfig", + version = "0.0.2-1" + }, { + name = "tree-sitter-kdl", + url = "tree-sitter-grammars/tree-sitter-kdl", + version = "0.0.2-1" + }, { + name = "tree-sitter-kotlin", + url = "fwcd/tree-sitter-kotlin", + version = "0.0.4-1" + }, { + name = "tree-sitter-koto", + url = "koto-lang/tree-sitter-koto", + version = "0.0.2-1" + }, { + name = "tree-sitter-kusto", + url = "Willem-J-an/tree-sitter-kusto", + version = "0.0.2-1" + }, { + name = "tree-sitter-lalrpop", + url = "traxys/tree-sitter-lalrpop", + version = "0.0.2-1" + }, { + name = "tree-sitter-latex", + url = "latex-lsp/tree-sitter-latex", + version = "0.0.3-1" + }, { + name = "tree-sitter-ledger", + url = "cbarrete/tree-sitter-ledger", + version = "0.0.2-1" + }, { + name = "tree-sitter-leo", + url = "r001/tree-sitter-leo", + version = "0.0.4-1" + }, { + name = "tree-sitter-linkerscript", + url = "tree-sitter-grammars/tree-sitter-linkerscript", + version = "0.0.2-1" + }, { + name = "tree-sitter-liquid", + url = "hankthetank27/tree-sitter-liquid", + version = "0.0.5-1" + }, { + name = "tree-sitter-liquidsoap", + url = "savonet/tree-sitter-liquidsoap", + version = "0.0.2-1" + }, { + name = "tree-sitter-llvm", + url = "benwilliamgraham/tree-sitter-llvm", + version = "0.0.2-1" + }, { + name = "tree-sitter-lua", + url = "tree-sitter-grammars/tree-sitter-lua", + version = "0.0.2-1" + }, { + name = "tree-sitter-luadoc", + url = "tree-sitter-grammars/tree-sitter-luadoc", + version = "0.0.2-1" + }, { + name = "tree-sitter-luap", + url = "tree-sitter-grammars/tree-sitter-luap", + version = "0.0.2-1" + }, { + name = "tree-sitter-luau", + url = "tree-sitter-grammars/tree-sitter-luau", + version = "0.0.2-1" + }, { + name = "tree-sitter-m68k", + url = "grahambates/tree-sitter-m68k", + version = "0.0.3-1" + }, { + name = "tree-sitter-make", + url = "alemuller/tree-sitter-make", + version = "0.0.2-1" + }, { + name = "tree-sitter-markdown", + url = "tree-sitter-grammars/tree-sitter-markdown", + version = "0.0.2-1" + }, { + name = "tree-sitter-markdown_inline", + url = "tree-sitter-grammars/tree-sitter-markdown", + version = "0.0.2-1" + }, { + name = "tree-sitter-matlab", + url = "acristoffers/tree-sitter-matlab", + version = "0.0.4-1" + }, { + name = "tree-sitter-menhir", + url = "Kerl13/tree-sitter-menhir", + version = "0.0.2-1" + }, { + name = "tree-sitter-mermaid", + url = "monaqa/tree-sitter-mermaid", + version = "0.0.2-1" + }, { + name = "tree-sitter-meson", + url = "tree-sitter-grammars/tree-sitter-meson", + version = "0.0.2-1" + }, { + name = "tree-sitter-mlir", + url = "artagnon/tree-sitter-mlir", + version = "0.0.3-1" + }, { + name = "tree-sitter-muttrc", + url = "neomutt/tree-sitter-muttrc", + version = "0.0.3-1" + }, { + name = "tree-sitter-nasm", + url = "naclsn/tree-sitter-nasm", + version = "0.0.2-1" + }, { + name = "tree-sitter-nginx", + url = "opa-oz/tree-sitter-nginx", + version = "0.0.2-1" + }, { + name = "tree-sitter-nickel", + url = "nickel-lang/tree-sitter-nickel", + version = "0.0.4-1" + }, { + name = "tree-sitter-nim", + url = "alaviss/tree-sitter-nim", + version = "0.0.2-1" + }, { + name = "tree-sitter-nim_format_string", + url = "aMOPel/tree-sitter-nim-format-string", + version = "0.0.2-1" + }, { + name = "tree-sitter-ninja", + url = "alemuller/tree-sitter-ninja", + version = "0.0.2-1" + }, { + name = "tree-sitter-nix", + url = "cstrahan/tree-sitter-nix", + version = "0.0.5-1" }, { name = "tree-sitter-norg", url = "nvim-neorg/tree-sitter-norg", - version = "0.2.4-1" + version = "0.2.5-1" }, { name = "tree-sitter-norg-meta", url = "nvim-neorg/tree-sitter-norg-meta", version = "0.1.0-1" + }, { + name = "tree-sitter-nqc", + url = "tree-sitter-grammars/tree-sitter-nqc", + version = "0.0.2-1" + }, { + name = "tree-sitter-objc", + url = "tree-sitter-grammars/tree-sitter-objc", + version = "0.0.2-1" + }, { + name = "tree-sitter-objdump", + url = "ColinKennedy/tree-sitter-objdump", + version = "0.0.2-1" + }, { + name = "tree-sitter-ocaml", + url = "tree-sitter/tree-sitter-ocaml", + version = "0.0.2-1" + }, { + name = "tree-sitter-ocaml_interface", + url = "tree-sitter/tree-sitter-ocaml", + version = "0.0.2-1" + }, { + name = "tree-sitter-ocamllex", + url = "atom-ocaml/tree-sitter-ocamllex", + version = "0.0.2-1" + }, { + name = "tree-sitter-odin", + url = "tree-sitter-grammars/tree-sitter-odin", + version = "0.0.2-1" + }, { + name = "tree-sitter-org", + url = "milisims/tree-sitter-org", + version = "0.0.1-1" }, { name = "tree-sitter-orgmode", url = "nvim-orgmode/tree-sitter-org", version = "1.3.2-1" + }, { + name = "tree-sitter-pascal", + url = "Isopod/tree-sitter-pascal", + version = "0.0.3-1" + }, { + name = "tree-sitter-passwd", + url = "ath3/tree-sitter-passwd", + version = "0.0.2-1" + }, { + name = "tree-sitter-pem", + url = "tree-sitter-grammars/tree-sitter-pem", + version = "0.0.2-1" + }, { + name = "tree-sitter-perl", + url = "tree-sitter-perl/tree-sitter-perl", + version = "0.0.4-1" + }, { + name = "tree-sitter-php", + url = "tree-sitter/tree-sitter-php", + version = "0.0.4-1" + }, { + name = "tree-sitter-php_only", + url = "tree-sitter/tree-sitter-php", + version = "0.0.4-1" + }, { + name = "tree-sitter-phpdoc", + url = "claytonrcarter/tree-sitter-phpdoc", + version = "0.0.2-1" + }, { + name = "tree-sitter-pioasm", + url = "leo60228/tree-sitter-pioasm", + version = "0.0.2-1" + }, { + name = "tree-sitter-po", + url = "tree-sitter-grammars/tree-sitter-po", + version = "0.0.2-1" + }, { + name = "tree-sitter-pod", + url = "tree-sitter-perl/tree-sitter-pod", + version = "0.0.3-1" + }, { + name = "tree-sitter-poe_filter", + url = "tree-sitter-grammars/tree-sitter-poe-filter", + version = "0.0.2-1" + }, { + name = "tree-sitter-pony", + url = "tree-sitter-grammars/tree-sitter-pony", + version = "0.0.2-1" + }, { + name = "tree-sitter-powershell", + url = "airbus-cert/tree-sitter-powershell", + version = "0.0.3-1" + }, { + name = "tree-sitter-printf", + url = "tree-sitter-grammars/tree-sitter-printf", + version = "0.0.2-1" + }, { + name = "tree-sitter-prisma", + url = "victorhqc/tree-sitter-prisma", + version = "0.0.2-1" + }, { + name = "tree-sitter-problog", + url = "foxyseta/tree-sitter-prolog", + version = "0.0.3-1" + }, { + name = "tree-sitter-prolog", + url = "foxyseta/tree-sitter-prolog", + version = "0.0.3-1" + }, { + name = "tree-sitter-promql", + url = "MichaHoffmann/tree-sitter-promql", + version = "0.0.2-1" + }, { + name = "tree-sitter-properties", + url = "tree-sitter-grammars/tree-sitter-properties", + version = "0.0.2-1" + }, { + name = "tree-sitter-proto", + url = "treywood/tree-sitter-proto", + version = "0.0.2-1" + }, { + name = "tree-sitter-prql", + url = "PRQL/tree-sitter-prql", + version = "0.0.2-1" + }, { + name = "tree-sitter-psv", + url = "tree-sitter-grammars/tree-sitter-csv", + version = "0.0.2-1" + }, { + name = "tree-sitter-pug", + url = "zealot128/tree-sitter-pug", + version = "0.0.2-1" + }, { + name = "tree-sitter-puppet", + url = "tree-sitter-grammars/tree-sitter-puppet", + version = "0.0.2-1" + }, { + name = "tree-sitter-purescript", + url = "postsolar/tree-sitter-purescript", + version = "0.0.2-1" + }, { + name = "tree-sitter-pymanifest", + url = "tree-sitter-grammars/tree-sitter-pymanifest", + version = "0.0.2-1" + }, { + name = "tree-sitter-python", + url = "tree-sitter/tree-sitter-python", + version = "0.0.3-1" + }, { + name = "tree-sitter-ql", + url = "tree-sitter/tree-sitter-ql", + version = "0.0.2-1" + }, { + name = "tree-sitter-qmldir", + url = "tree-sitter-grammars/tree-sitter-qmldir", + version = "0.0.2-1" + }, { + name = "tree-sitter-qmljs", + url = "yuja/tree-sitter-qmljs", + version = "0.0.3-1" + }, { + name = "tree-sitter-query", + url = "tree-sitter-grammars/tree-sitter-query", + version = "0.0.2-1" + }, { + name = "tree-sitter-r", + url = "r-lib/tree-sitter-r", + version = "0.0.2-1" + }, { + name = "tree-sitter-racket", + url = "6cdh/tree-sitter-racket", + version = "0.0.2-1" + }, { + name = "tree-sitter-ralph", + url = "alephium/tree-sitter-ralph", + version = "0.0.2-1" + }, { + name = "tree-sitter-rasi", + url = "Fymyte/tree-sitter-rasi", + version = "0.0.2-1" + }, { + name = "tree-sitter-rbs", + url = "joker1007/tree-sitter-rbs", + version = "0.0.2-1" + }, { + name = "tree-sitter-re2c", + url = "tree-sitter-grammars/tree-sitter-re2c", + version = "0.0.2-1" + }, { + name = "tree-sitter-readline", + url = "tree-sitter-grammars/tree-sitter-readline", + version = "0.0.2-1" + }, { + name = "tree-sitter-regex", + url = "tree-sitter/tree-sitter-regex", + version = "0.0.2-1" + }, { + name = "tree-sitter-rego", + url = "FallenAngel97/tree-sitter-rego", + version = "0.0.2-1" + }, { + name = "tree-sitter-requirements", + url = "tree-sitter-grammars/tree-sitter-requirements", + version = "0.0.2-1" + }, { + name = "tree-sitter-rescript", + url = "rescript-lang/tree-sitter-rescript", + version = "0.0.3-1" + }, { + name = "tree-sitter-rnoweb", + url = "bamonroe/tree-sitter-rnoweb", + version = "0.0.2-1" + }, { + name = "tree-sitter-robot", + url = "Hubro/tree-sitter-robot", + version = "0.0.2-1" + }, { + name = "tree-sitter-robots", + url = "opa-oz/tree-sitter-robots-txt", + version = "0.0.2-1" + }, { + name = "tree-sitter-roc", + url = "faldor20/tree-sitter-roc", + version = "0.0.3-1" + }, { + name = "tree-sitter-ron", + url = "tree-sitter-grammars/tree-sitter-ron", + version = "0.0.2-1" + }, { + name = "tree-sitter-rst", + url = "stsewd/tree-sitter-rst", + version = "0.0.2-1" + }, { + name = "tree-sitter-ruby", + url = "tree-sitter/tree-sitter-ruby", + version = "0.0.3-1" + }, { + name = "tree-sitter-rust", + url = "tree-sitter/tree-sitter-rust", + version = "0.0.3-1" + }, { + name = "tree-sitter-scala", + url = "tree-sitter/tree-sitter-scala", + version = "0.0.3-1" + }, { + name = "tree-sitter-scfg", + url = "rockorager/tree-sitter-scfg", + version = "0.0.2-1" + }, { + name = "tree-sitter-scheme", + url = "6cdh/tree-sitter-scheme", + version = "0.0.2-1" + }, { + name = "tree-sitter-scss", + url = "serenadeai/tree-sitter-scss", + version = "0.0.2-1" + }, { + name = "tree-sitter-sflog", + url = "aheber/tree-sitter-sfapex", + version = "0.0.3-1" + }, { + name = "tree-sitter-slang", + url = "tree-sitter-grammars/tree-sitter-slang", + version = "0.0.3-1" + }, { + name = "tree-sitter-slint", + url = "slint-ui/tree-sitter-slint", + version = "0.0.3-1" + }, { + name = "tree-sitter-smali", + url = "tree-sitter-grammars/tree-sitter-smali", + version = "0.0.2-1" + }, { + name = "tree-sitter-smithy", + url = "indoorvivants/tree-sitter-smithy", + version = "0.0.2-1" + }, { + name = "tree-sitter-snakemake", + url = "osthomas/tree-sitter-snakemake", + version = "0.0.3-1" + }, { + name = "tree-sitter-solidity", + url = "JoranHonig/tree-sitter-solidity", + version = "0.0.2-1" + }, { + name = "tree-sitter-soql", + url = "aheber/tree-sitter-sfapex", + version = "0.0.3-1" + }, { + name = "tree-sitter-sosl", + url = "aheber/tree-sitter-sfapex", + version = "0.0.3-1" + }, { + name = "tree-sitter-sourcepawn", + url = "nilshelmig/tree-sitter-sourcepawn", + version = "0.0.3-1" + }, { + name = "tree-sitter-sparql", + url = "GordianDziwis/tree-sitter-sparql", + version = "0.0.2-1" + }, { + name = "tree-sitter-sql", + url = "derekstride/tree-sitter-sql", + version = "0.0.3-1" + }, { + name = "tree-sitter-squirrel", + url = "tree-sitter-grammars/tree-sitter-squirrel", + version = "0.0.2-1" + }, { + name = "tree-sitter-ssh_config", + url = "tree-sitter-grammars/tree-sitter-ssh-config", + version = "0.0.2-1" + }, { + name = "tree-sitter-starlark", + url = "tree-sitter-grammars/tree-sitter-starlark", + version = "0.0.2-1" + }, { + name = "tree-sitter-strace", + url = "sigmaSd/tree-sitter-strace", + version = "0.0.2-1" + }, { + name = "tree-sitter-styled", + url = "mskelton/tree-sitter-styled", + version = "0.0.3-1" + }, { + name = "tree-sitter-supercollider", + url = "madskjeldgaard/tree-sitter-supercollider", + version = "0.0.2-1" + }, { + name = "tree-sitter-surface", + url = "connorlay/tree-sitter-surface", + version = "0.0.2-1" + }, { + name = "tree-sitter-svelte", + url = "tree-sitter-grammars/tree-sitter-svelte", + version = "0.0.3-1" + }, { + name = "tree-sitter-swift", + url = "alex-pinkus/tree-sitter-swift", + version = "0.0.3-1" + }, { + name = "tree-sitter-sxhkdrc", + url = "RaafatTurki/tree-sitter-sxhkdrc", + version = "0.0.2-1" + }, { + name = "tree-sitter-systemtap", + url = "ok-ryoko/tree-sitter-systemtap", + version = "0.0.3-1" + }, { + name = "tree-sitter-systemverilog", + url = "zhangwwpeng/tree-sitter-systemverilog", + version = "0.0.3-1" + }, { + name = "tree-sitter-t32", + url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/6182836f4128725f1e74ce986840d7317021a015.zip", + version = "0.0.2-1" + }, { + name = "tree-sitter-tablegen", + url = "tree-sitter-grammars/tree-sitter-tablegen", + version = "0.0.2-1" + }, { + name = "tree-sitter-tact", + url = "tact-lang/tree-sitter-tact", + version = "0.0.3-1" + }, { + name = "tree-sitter-tcl", + url = "tree-sitter-grammars/tree-sitter-tcl", + version = "0.0.2-1" + }, { + name = "tree-sitter-teal", + url = "euclidianAce/tree-sitter-teal", + version = "0.0.2-1" + }, { + name = "tree-sitter-templ", + url = "vrischmann/tree-sitter-templ", + version = "0.0.3-1" + }, { + name = "tree-sitter-terraform", + url = "MichaHoffmann/tree-sitter-hcl", + version = "0.0.2-1" + }, { + name = "tree-sitter-textproto", + url = "PorterAtGoogle/tree-sitter-textproto", + version = "0.0.2-1" + }, { + name = "tree-sitter-thrift", + url = "tree-sitter-grammars/tree-sitter-thrift", + version = "0.0.2-1" + }, { + name = "tree-sitter-tiger", + url = "ambroisie/tree-sitter-tiger", + version = "0.0.2-1" + }, { + name = "tree-sitter-tlaplus", + url = "tlaplus-community/tree-sitter-tlaplus", + version = "0.0.2-1" + }, { + name = "tree-sitter-tmux", + url = "Freed-Wu/tree-sitter-tmux", + version = "0.0.3-1" + }, { + name = "tree-sitter-todotxt", + url = "arnarg/tree-sitter-todotxt", + version = "0.0.2-1" + }, { + name = "tree-sitter-toml", + url = "tree-sitter-grammars/tree-sitter-toml", + version = "0.0.2-1" + }, { + name = "tree-sitter-tsv", + url = "tree-sitter-grammars/tree-sitter-csv", + version = "0.0.2-1" + }, { + name = "tree-sitter-tsx", + url = "tree-sitter/tree-sitter-typescript", + version = "0.0.3-1" + }, { + name = "tree-sitter-turtle", + url = "GordianDziwis/tree-sitter-turtle", + version = "0.0.2-1" + }, { + name = "tree-sitter-twig", + url = "gbprod/tree-sitter-twig", + version = "0.0.2-1" + }, { + name = "tree-sitter-typescript", + url = "tree-sitter/tree-sitter-typescript", + version = "0.0.3-1" + }, { + name = "tree-sitter-typespec", + url = "happenslol/tree-sitter-typespec", + version = "0.0.3-1" + }, { + name = "tree-sitter-typoscript", + url = "Teddytrombone/tree-sitter-typoscript", + version = "0.0.2-1" + }, { + name = "tree-sitter-typst", + url = "uben0/tree-sitter-typst", + version = "0.0.3-1" + }, { + name = "tree-sitter-udev", + url = "tree-sitter-grammars/tree-sitter-udev", + version = "0.0.2-1" + }, { + name = "tree-sitter-ungrammar", + url = "tree-sitter-grammars/tree-sitter-ungrammar", + version = "0.0.2-1" + }, { + name = "tree-sitter-unison", + url = "kylegoetz/tree-sitter-unison", + version = "0.0.2-1" + }, { + name = "tree-sitter-usd", + url = "ColinKennedy/tree-sitter-usd", + version = "0.0.2-1" + }, { + name = "tree-sitter-uxntal", + url = "tree-sitter-grammars/tree-sitter-uxntal", + version = "0.0.2-1" + }, { + name = "tree-sitter-v", + url = "vlang/v-analyzer", + version = "0.0.3-1" + }, { + name = "tree-sitter-vala", + url = "vala-lang/tree-sitter-vala", + version = "0.0.2-1" + }, { + name = "tree-sitter-vento", + url = "ventojs/tree-sitter-vento", + version = "0.0.2-1" + }, { + name = "tree-sitter-verilog", + url = "tree-sitter/tree-sitter-verilog", + version = "0.0.2-1" + }, { + name = "tree-sitter-vhdl", + url = "jpt13653903/tree-sitter-vhdl", + version = "0.0.2-1" + }, { + name = "tree-sitter-vhs", + url = "charmbracelet/tree-sitter-vhs", + version = "0.0.3-1" + }, { + name = "tree-sitter-vim", + url = "tree-sitter-grammars/tree-sitter-vim", + version = "0.0.3-1" + }, { + name = "tree-sitter-vimdoc", + url = "neovim/tree-sitter-vimdoc", + version = "0.0.2-1" + }, { + name = "tree-sitter-vrl", + url = "belltoy/tree-sitter-vrl", + version = "0.0.2-1" + }, { + name = "tree-sitter-vue", + url = "tree-sitter-grammars/tree-sitter-vue", + version = "0.0.2-1" + }, { + name = "tree-sitter-wgsl", + url = "szebniok/tree-sitter-wgsl", + version = "0.0.2-1" + }, { + name = "tree-sitter-wgsl_bevy", + url = "tree-sitter-grammars/tree-sitter-wgsl-bevy", + version = "0.0.2-1" + }, { + name = "tree-sitter-wing", + url = "winglang/tree-sitter-wing", + version = "0.0.2-1" + }, { + name = "tree-sitter-wit", + url = "liamwh/tree-sitter-wit", + version = "0.0.3-1" + }, { + name = "tree-sitter-xcompose", + url = "tree-sitter-grammars/tree-sitter-xcompose", + version = "0.0.2-1" + }, { + name = "tree-sitter-xml", + url = "tree-sitter-grammars/tree-sitter-xml", + version = "0.0.2-1" + }, { + name = "tree-sitter-yaml", + url = "tree-sitter-grammars/tree-sitter-yaml", + version = "0.0.2-1" + }, { + name = "tree-sitter-yang", + url = "Hubro/tree-sitter-yang", + version = "0.0.2-1" + }, { + name = "tree-sitter-yuck", + url = "tree-sitter-grammars/tree-sitter-yuck", + version = "0.0.2-1" + }, { + name = "tree-sitter-zathurarc", + url = "Freed-Wu/tree-sitter-zathurarc", + version = "0.0.3-1" + }, { + name = "tree-sitter-zig", + url = "tree-sitter-grammars/tree-sitter-zig", + version = "0.0.3-1" }, { name = "trouble.nvim", url = "folke/trouble.nvim", - version = "3.4.3-1" + version = "3.6.0-1" + }, { + name = "ts-comments.nvim", + url = "folke/ts-comments.nvim", + version = "1.5.0-1" }, { name = "tsc.nvim", url = "dmmulroy/tsc.nvim", - version = "2.3.0-1" + version = "2.4.1-1" }, { name = "twilight.nvim", url = "folke/twilight.nvim", @@ -730,15 +2066,19 @@ return }, { name = "vgit.nvim", url = "tanvirtin/vgit.nvim", - version = "0.2.2-1" + version = "0.2.3-1" }, { name = "which-key.nvim", url = "folke/which-key.nvim", - version = "2.1.0-1" + version = "3.13.2-1" }, { name = "windline.nvim", url = "windwp/windline.nvim", version = "1.1.0-1" + }, { + name = "wrapping-paper.nvim", + url = "benlubas/wrapping-paper.nvim", + version = "1.0.0-1" }, { name = "yanky.nvim", url = "gbprod/yanky.nvim", @@ -746,11 +2086,11 @@ return }, { name = "yazi.nvim", url = "mikavilpas/yazi.nvim", - version = "master-1" + version = "6.0.4-1" }, { name = "zen-mode.nvim", url = "folke/zen-mode.nvim", - version = "1.3.0-1" + version = "1.4.0-1" }, { name = "zk-nvim", url = "zk-org/zk-nvim", From aca30f63619a7492ecdea8833a065cf83c80f764 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 16 Sep 2024 10:13:11 +0200 Subject: [PATCH 772/815] fix(bootstrap): single forward slash. Fixes #1747 --- bootstrap.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bootstrap.lua b/bootstrap.lua index 16d9f1d..88c1a44 100644 --- a/bootstrap.lua +++ b/bootstrap.lua @@ -1,4 +1,4 @@ --- Lay Bootstrapper +-- Lazy Bootstrapper -- Usage: -- ```lua -- load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() @@ -7,7 +7,7 @@ local M = {} function M.setup() if vim.env.LAZY_STDPATH then - local root = vim.fn.fnamemodify(vim.env.LAZY_STDPATH, ":p") + local root = vim.fn.fnamemodify(vim.env.LAZY_STDPATH, ":p"):gsub("[\\/]$", "") for _, name in ipairs({ "config", "data", "state", "cache" }) do vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name end From 460e1cd8f24e364d54543a4b0e83f6f4ec1f65fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 16 Sep 2024 08:17:41 +0000 Subject: [PATCH 773/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 710 ++++++++++++++++-------------- 1 file changed, 375 insertions(+), 335 deletions(-) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index b91e678..6b1d4fb 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -14,11 +14,11 @@ return }, { name = "aerial.nvim", url = "stevearc/aerial.nvim", - version = "2.2.0-1" + version = "2.3.0-1" }, { name = "ai.nvim", url = "S1M0N38/ai.nvim", - version = "0.1.0-1" + version = "1.2.0-1" }, { name = "astral.nvim", url = "rootiest/astral.nvim", @@ -31,6 +31,14 @@ return name = "banana.nvim", url = "CWood-sdf/banana.nvim", version = "0.1.0-1" + }, { + name = "bars-n-lines.nvim", + url = "OXY2DEV/bars-N-lines.nvim", + version = "1.0.0-1" + }, { + name = "base.nvim", + url = "S1M0N38/base.nvim", + version = "1.0.2-1" }, { name = "better-escape.nvim", url = "max397574/better-escape.nvim", @@ -90,11 +98,15 @@ return }, { name = "conform.nvim", url = "stevearc/conform.nvim", - version = "8.0.0-1" + version = "8.1.0-1" }, { name = "cybu.nvim", url = "ghillb/cybu.nvim", version = "1.0-1" + }, { + name = "dante.nvim", + url = "S1M0N38/dante.nvim", + version = "1.0.1-1" }, { name = "daylight.nvim", url = "NTBBloodbath/daylight.nvim", @@ -106,7 +118,7 @@ return }, { name = "decipher.nvim", url = "MisanthropicBit/decipher.nvim", - version = "1.0.1-1" + version = "1.0.2-1" }, { name = "delog.nvim", url = "ej-shafran/delog.nvim", @@ -214,7 +226,7 @@ return }, { name = "git.nvim", url = "Kibadda/git.nvim", - version = "3.3.1-1" + version = "3.3.2-1" }, { name = "github-nvim-theme", url = "projekt0n/github-nvim-theme", @@ -223,6 +235,10 @@ return name = "gitlinker.nvim", url = "linrongbin16/gitlinker.nvim", version = "4.13.1-1" + }, { + name = "gitsigns.nvim", + url = "lewis6991/gitsigns.nvim", + version = "0.9.0-1" }, { name = "glow.nvim", url = "ellisonleao/glow.nvim", @@ -258,7 +274,7 @@ return }, { name = "headlines.nvim", url = "lukas-reineke/headlines.nvim", - version = "4.0.1-1" + version = "4.0.2-1" }, { name = "heirline.nvim", url = "rebelot/heirline.nvim", @@ -278,11 +294,11 @@ return }, { name = "hotpot.nvim", url = "rktjmp/hotpot.nvim", - version = "0.14.3-1" + version = "0.14.5-1" }, { name = "hurl.nvim", url = "jellydn/hurl.nvim", - version = "1.7.0-1" + version = "1.7.1-1" }, { name = "hydra.nvim", url = "nvimtools/hydra.nvim", @@ -303,6 +319,10 @@ return name = "kai.nvim", url = "Kamilcuk/kai.nvim", version = "0.0.6-1" + }, { + name = "kanban.nvim", + url = "Kibadda/kanban.nvim", + version = "1.3.0-1" }, { name = "lazy.nvim", url = "folke/lazy.nvim", @@ -326,11 +346,7 @@ return }, { name = "live-command.nvim", url = "smjonas/live-command.nvim", - version = "1.2.1-1" - }, { - name = "logger.nvim", - url = "jnpngshiii/logger.nvim", - version = "0.4.6-1" + version = "2.0.0-1" }, { name = "logging.nvim", url = "NTBBloodbath/logging.nvim", @@ -386,11 +402,11 @@ return }, { name = "markview.nvim", url = "OXY2DEV/markview.nvim", - version = "22.0.1-1" + version = "23.1.0-1" }, { name = "mason-lspconfig.nvim", url = "williamboman/mason-lspconfig.nvim", - version = "1.30.0-1" + version = "1.31.0-1" }, { name = "mason-nvim-dap.nvim", url = "jay-babu/mason-nvim-dap.nvim", @@ -399,10 +415,6 @@ return name = "mason.nvim", url = "williamboman/mason.nvim", version = "1.10.0-1" - }, { - name = "mindmap.nvim", - url = "jnpngshiii/mindmap.nvim", - version = "0.7.1-1" }, { name = "mini.nvim", url = "echasnovski/mini.nvim", @@ -454,11 +466,11 @@ return }, { name = "neorg-conceal-wrap", url = "benlubas/neorg-conceal-wrap", - version = "1.0.0-1" + version = "1.0.1-1" }, { name = "neorg-interim-ls", url = "benlubas/neorg-interim-ls", - version = "1.2.0-1" + version = "1.2.1-1" }, { name = "neorg-se", url = "benlubas/neorg-se", @@ -482,11 +494,11 @@ return }, { name = "neotest-busted", url = "MisanthropicBit/neotest-busted", - version = "0.1.0-1" + version = "0.2.0-1" }, { name = "neotest-golang", url = "fredrikaverpil/neotest-golang", - version = "1.0.0-1" + version = "1.1.1-1" }, { name = "neotest-haskell", url = "mrcjkb/neotest-haskell", @@ -494,7 +506,7 @@ return }, { name = "neotest-java", url = "rcasia/neotest-java", - version = "0.14.1-1" + version = "0.15.6-1" }, { name = "netman.nvim", url = "miversen33/netman.nvim", @@ -506,7 +518,7 @@ return }, { name = "no-neck-pain.nvim", url = "shortcuts/no-neck-pain.nvim", - version = "1.16.0-1" + version = "2.0.1-1" }, { name = "noice.nvim", url = "folke/noice.nvim", @@ -586,7 +598,7 @@ return }, { name = "nvim-lspconfig", url = "neovim/nvim-lspconfig", - version = "0.1.8-1" + version = "1.0.0-1" }, { name = "nvim-metals", url = "scalameta/nvim-metals", @@ -618,7 +630,7 @@ return }, { name = "nvim-smuggler", url = "Klafyvel/nvim-smuggler", - version = "0.3.0-1" + version = "0.4.2-1" }, { name = "nvim-snippets", url = "garymjr/nvim-snippets", @@ -658,7 +670,7 @@ return }, { name = "oil.nvim", url = "stevearc/oil.nvim", - version = "2.12.1-1" + version = "2.12.2-1" }, { name = "onedarkpro.nvim", url = "olimorris/onedarkpro.nvim", @@ -690,7 +702,7 @@ return }, { name = "papis.nvim", url = "jghauser/papis.nvim", - version = "0.6.1-1" + version = "0.7.0-1" }, { name = "paq-nvim", url = "savq/paq-nvim", @@ -702,7 +714,7 @@ return }, { name = "persisted.nvim", url = "olimorris/persisted.nvim", - version = "1.1.0-1" + version = "2.0.0-1" }, { name = "persistence.nvim", url = "folke/persistence.nvim", @@ -715,6 +727,10 @@ return name = "pretty-fold.nvim", url = "anuvyklack/pretty-fold.nvim", version = "3.0-1" + }, { + name = "processing.nvim", + url = "sophieforrest/processing.nvim", + version = "1.1.0-1" }, { name = "quarry.nvim", url = "rudionrails/quarry.nvim", @@ -738,23 +754,23 @@ return }, { name = "render-markdown.nvim", url = "MeanderingProgrammer/render-markdown.nvim", - version = "6.3.0-1" + version = "7.0.0-1" }, { name = "rest.nvim", url = "rest-nvim/rest.nvim", - version = "3.2.1-1" + version = "3.7.0-1" }, { name = "rocks-config.nvim", url = "nvim-neorocks/rocks-config.nvim", - version = "2.2.0-1" + version = "2.3.1-1" }, { name = "rocks-dev.nvim", url = "nvim-neorocks/rocks-dev.nvim", - version = "1.5.0-1" + version = "1.7.0-1" }, { name = "rocks-git.nvim", url = "nvim-neorocks/rocks-git.nvim", - version = "2.0.1-1" + version = "2.2.0-1" }, { name = "rocks-lazy.nvim", url = "nvim-neorocks/rocks-lazy.nvim", @@ -762,19 +778,23 @@ return }, { name = "rocks-treesitter.nvim", url = "nvim-neorocks/rocks-treesitter.nvim", - version = "1.1.1-1" + version = "1.1.2-1" }, { name = "rocks.nvim", url = "nvim-neorocks/rocks.nvim", - version = "2.38.2-1" + version = "2.40.0-1" }, { name = "rtp.nvim", url = "nvim-neorocks/rtp.nvim", version = "1.2.0-1" + }, { + name = "runt.nvim", + url = "Julian/runt.nvim", + version = "2024.9.2-1" }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "5.2.2-1" + version = "5.4.2-1" }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", @@ -794,7 +814,7 @@ return }, { name = "sf.nvim", url = "xixiaofinland/sf.nvim", - version = "1.5.0-1" + version = "1.6.0-1" }, { name = "sg.nvim", url = "sourcegraph/sg.nvim", @@ -807,6 +827,10 @@ return name = "squirrel.nvim", url = "xiaoshihou514/squirrel.nvim", version = "1.0.0-1" + }, { + name = "starter.nvim", + url = "Kibadda/starter.nvim", + version = "1.2.0-1" }, { name = "storm-mode.nvim", url = "HoppenR/storm-mode.nvim", @@ -858,647 +882,663 @@ return }, { name = "tree-sitter-ada", url = "briot/tree-sitter-ada", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-agda", url = "tree-sitter/tree-sitter-agda", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-angular", url = "dlvandenberg/tree-sitter-angular", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-apex", url = "aheber/tree-sitter-sfapex", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-arduino", url = "tree-sitter-grammars/tree-sitter-arduino", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-asm", url = "RubixDev/tree-sitter-asm", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-astro", url = "virchau13/tree-sitter-astro", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-authzed", url = "mleonidas/tree-sitter-authzed", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-awk", url = "Beaglefoot/tree-sitter-awk", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-bash", url = "tree-sitter/tree-sitter-bash", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-bass", url = "vito/tree-sitter-bass", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-beancount", url = "polarmutex/tree-sitter-beancount", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-bibtex", url = "latex-lsp/tree-sitter-bibtex", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-bicep", url = "tree-sitter-grammars/tree-sitter-bicep", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-bitbake", url = "tree-sitter-grammars/tree-sitter-bitbake", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-blueprint", url = "https://gitlab.com/gabmus/tree-sitter-blueprint/-/archive/60ba73739c6083c693d86a1a7cf039c07eb4ed59.zip", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-bp", url = "ambroisie/tree-sitter-bp", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-c", url = "tree-sitter/tree-sitter-c", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-c_sharp", url = "tree-sitter/tree-sitter-c-sharp", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-cairo", url = "tree-sitter-grammars/tree-sitter-cairo", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-capnp", url = "tree-sitter-grammars/tree-sitter-capnp", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-chatito", url = "tree-sitter-grammars/tree-sitter-chatito", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-clojure", url = "sogaiu/tree-sitter-clojure", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-cmake", url = "uyha/tree-sitter-cmake", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-comment", url = "stsewd/tree-sitter-comment", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-commonlisp", url = "tree-sitter-grammars/tree-sitter-commonlisp", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-cooklang", url = "addcninblue/tree-sitter-cooklang", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-corn", url = "jakestanger/tree-sitter-corn", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-cpon", url = "tree-sitter-grammars/tree-sitter-cpon", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-cpp", url = "tree-sitter/tree-sitter-cpp", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-css", url = "tree-sitter/tree-sitter-css", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-csv", url = "tree-sitter-grammars/tree-sitter-csv", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-cuda", url = "tree-sitter-grammars/tree-sitter-cuda", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-cue", url = "eonpatapon/tree-sitter-cue", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-d", url = "gdamore/tree-sitter-d", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-dart", url = "UserNobody14/tree-sitter-dart", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-devicetree", url = "joelspadin/tree-sitter-devicetree", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-dhall", url = "jbellerb/tree-sitter-dhall", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-diff", url = "the-mikedavis/tree-sitter-diff", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-disassembly", url = "ColinKennedy/tree-sitter-disassembly", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-djot", url = "treeman/tree-sitter-djot", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-dockerfile", url = "camdencheek/tree-sitter-dockerfile", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-dot", url = "rydesun/tree-sitter-dot", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-doxygen", url = "tree-sitter-grammars/tree-sitter-doxygen", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-dtd", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-earthfile", url = "glehmann/tree-sitter-earthfile", - version = "0.0.2-1" + version = "0.0.12-1" }, { name = "tree-sitter-ebnf", url = "RubixDev/ebnf", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-ecma", url = "nvim-neorocks/luarocks-stub", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-editorconfig", url = "ValdezFOmar/tree-sitter-editorconfig", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-eds", url = "uyha/tree-sitter-eds", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-eex", url = "connorlay/tree-sitter-eex", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-elixir", url = "elixir-lang/tree-sitter-elixir", - version = "0.0.2-1" + version = "0.0.11-1" }, { name = "tree-sitter-elm", url = "elm-tooling/tree-sitter-elm", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-elsa", url = "glapa-grossklag/tree-sitter-elsa", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-elvish", url = "elves/tree-sitter-elvish", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-embedded_template", url = "tree-sitter/tree-sitter-embedded-template", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-erlang", url = "WhatsApp/tree-sitter-erlang", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-facility", url = "FacilityApi/tree-sitter-facility", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-faust", url = "khiner/tree-sitter-faust", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-fennel", url = "alexmozaidze/tree-sitter-fennel", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-fidl", url = "google/tree-sitter-fidl", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-firrtl", url = "tree-sitter-grammars/tree-sitter-firrtl", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-fish", url = "ram02z/tree-sitter-fish", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-foam", url = "FoamScience/tree-sitter-foam", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-forth", url = "AlexanderBrevig/tree-sitter-forth", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-fortran", url = "stadelmanma/tree-sitter-fortran", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-fsh", url = "mgramigna/tree-sitter-fsh", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-func", url = "tree-sitter-grammars/tree-sitter-func", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-fusion", url = "https://gitlab.com/jirgn/tree-sitter-fusion/-/archive/19db2f47ba4c3a0f6238d4ae0e2abfca16e61dd6.zip", - version = "0.0.2-1" + version = "0.0.10-1" + }, { + name = "tree-sitter-gap", + url = "gap-system/tree-sitter-gap", + version = "0.0.10-1" + }, { + name = "tree-sitter-gaptst", + url = "gap-system/tree-sitter-gaptst", + version = "0.0.10-1" }, { name = "tree-sitter-gdscript", url = "PrestonKnopp/tree-sitter-gdscript", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-gdshader", url = "GodOfAvacyn/tree-sitter-gdshader", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-git_config", url = "the-mikedavis/tree-sitter-git-config", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-git_rebase", url = "the-mikedavis/tree-sitter-git-rebase", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-gitattributes", url = "tree-sitter-grammars/tree-sitter-gitattributes", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-gitcommit", url = "gbprod/tree-sitter-gitcommit", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-gitignore", url = "shunsambongi/tree-sitter-gitignore", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-gleam", url = "gleam-lang/tree-sitter-gleam", - version = "0.0.3-1" + version = "0.0.11-1" }, { name = "tree-sitter-glimmer", - url = "alexlafroscia/tree-sitter-glimmer", - version = "0.0.3-1" + url = "ember-tooling/tree-sitter-glimmer", + version = "0.0.10-1" + }, { + name = "tree-sitter-glimmer_javascript", + url = "NullVoxPopuli/tree-sitter-glimmer-javascript", + version = "0.0.10-1" + }, { + name = "tree-sitter-glimmer_typescript", + url = "NullVoxPopuli/tree-sitter-glimmer-typescript", + version = "0.0.10-1" }, { name = "tree-sitter-glsl", url = "tree-sitter-grammars/tree-sitter-glsl", - version = "0.0.3-1" + version = "0.0.11-1" }, { name = "tree-sitter-gn", url = "tree-sitter-grammars/tree-sitter-gn", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-gnuplot", url = "dpezto/tree-sitter-gnuplot", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-go", url = "tree-sitter/tree-sitter-go", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-goctl", url = "chaozwn/tree-sitter-goctl", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-godot_resource", url = "PrestonKnopp/tree-sitter-godot-resource", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-gomod", url = "camdencheek/tree-sitter-go-mod", - version = "0.0.3-1" + version = "0.0.11-1" }, { name = "tree-sitter-gosum", url = "tree-sitter-grammars/tree-sitter-go-sum", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-gotmpl", url = "ngalaiko/tree-sitter-go-template", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-gowork", url = "omertuc/tree-sitter-go-work", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-gpg", url = "tree-sitter-grammars/tree-sitter-gpg-config", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-graphql", url = "bkegley/tree-sitter-graphql", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-groovy", url = "murtaza64/tree-sitter-groovy", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-gstlaunch", url = "tree-sitter-grammars/tree-sitter-gstlaunch", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-hack", url = "slackhq/tree-sitter-hack", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-hare", url = "tree-sitter-grammars/tree-sitter-hare", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-haskell", url = "tree-sitter/tree-sitter-haskell", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-haskell_persistent", url = "MercuryTechnologies/tree-sitter-haskell-persistent", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-hcl", url = "tree-sitter-grammars/tree-sitter-hcl", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-heex", url = "connorlay/tree-sitter-heex", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-helm", url = "ngalaiko/tree-sitter-go-template", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-hjson", url = "winston0410/tree-sitter-hjson", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-hlsl", url = "tree-sitter-grammars/tree-sitter-hlsl", - version = "0.0.3-1" + version = "0.0.11-1" }, { name = "tree-sitter-hlsplaylist", url = "Freed-Wu/tree-sitter-hlsplaylist", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-hocon", url = "antosha417/tree-sitter-hocon", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-hoon", url = "urbit-pilled/tree-sitter-hoon", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-html", url = "tree-sitter/tree-sitter-html", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-html_tags", url = "nvim-neorocks/luarocks-stub", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-htmldjango", url = "interdependence/tree-sitter-htmldjango", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-http", url = "rest-nvim/tree-sitter-http", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-hurl", url = "pfeiferj/tree-sitter-hurl", - version = "0.0.3-1" + version = "0.0.11-1" }, { name = "tree-sitter-hyprlang", url = "tree-sitter-grammars/tree-sitter-hyprlang", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-idl", url = "cathaysia/tree-sitter-idl", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-ini", url = "justinmk/tree-sitter-ini", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-inko", url = "inko-lang/tree-sitter-inko", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-ispc", url = "tree-sitter-grammars/tree-sitter-ispc", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-janet_simple", url = "sogaiu/tree-sitter-janet-simple", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-java", url = "tree-sitter/tree-sitter-java", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-javascript", url = "tree-sitter/tree-sitter-javascript", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-jq", url = "flurie/tree-sitter-jq", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-jsdoc", url = "tree-sitter/tree-sitter-jsdoc", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-json", url = "tree-sitter/tree-sitter-json", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-json5", url = "Joakker/tree-sitter-json5", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-jsonc", url = "https://gitlab.com/WhyNotHugo/tree-sitter-jsonc/-/archive/02b01653c8a1c198ae7287d566efa86a135b30d5.zip", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-jsonnet", url = "sourcegraph/tree-sitter-jsonnet", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-jsx", url = "nvim-neorocks/luarocks-stub", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-julia", url = "tree-sitter/tree-sitter-julia", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-just", url = "IndianBoy42/tree-sitter-just", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-kconfig", url = "tree-sitter-grammars/tree-sitter-kconfig", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-kdl", url = "tree-sitter-grammars/tree-sitter-kdl", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-kotlin", url = "fwcd/tree-sitter-kotlin", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-koto", url = "koto-lang/tree-sitter-koto", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-kusto", url = "Willem-J-an/tree-sitter-kusto", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-lalrpop", url = "traxys/tree-sitter-lalrpop", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-latex", url = "latex-lsp/tree-sitter-latex", - version = "0.0.3-1" + version = "0.0.11-1" }, { name = "tree-sitter-ledger", url = "cbarrete/tree-sitter-ledger", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-leo", url = "r001/tree-sitter-leo", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-linkerscript", url = "tree-sitter-grammars/tree-sitter-linkerscript", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-liquid", url = "hankthetank27/tree-sitter-liquid", - version = "0.0.5-1" + version = "0.0.10-1" }, { name = "tree-sitter-liquidsoap", url = "savonet/tree-sitter-liquidsoap", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-llvm", url = "benwilliamgraham/tree-sitter-llvm", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-lua", url = "tree-sitter-grammars/tree-sitter-lua", - version = "0.0.2-1" + version = "0.0.11-1" }, { name = "tree-sitter-luadoc", url = "tree-sitter-grammars/tree-sitter-luadoc", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-luap", url = "tree-sitter-grammars/tree-sitter-luap", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-luau", url = "tree-sitter-grammars/tree-sitter-luau", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-m68k", url = "grahambates/tree-sitter-m68k", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-make", url = "alemuller/tree-sitter-make", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-markdown", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.2-1" + version = "0.0.13-1" }, { name = "tree-sitter-markdown_inline", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.2-1" + version = "0.0.13-1" }, { name = "tree-sitter-matlab", url = "acristoffers/tree-sitter-matlab", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-menhir", url = "Kerl13/tree-sitter-menhir", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-mermaid", url = "monaqa/tree-sitter-mermaid", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-meson", url = "tree-sitter-grammars/tree-sitter-meson", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-mlir", url = "artagnon/tree-sitter-mlir", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-muttrc", url = "neomutt/tree-sitter-muttrc", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-nasm", url = "naclsn/tree-sitter-nasm", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-nginx", url = "opa-oz/tree-sitter-nginx", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-nickel", url = "nickel-lang/tree-sitter-nickel", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-nim", url = "alaviss/tree-sitter-nim", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-nim_format_string", url = "aMOPel/tree-sitter-nim-format-string", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-ninja", url = "alemuller/tree-sitter-ninja", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-nix", url = "cstrahan/tree-sitter-nix", - version = "0.0.5-1" + version = "0.0.10-1" }, { name = "tree-sitter-norg", url = "nvim-neorg/tree-sitter-norg", - version = "0.2.5-1" + version = "0.2.6-1" }, { name = "tree-sitter-norg-meta", url = "nvim-neorg/tree-sitter-norg-meta", @@ -1506,31 +1546,31 @@ return }, { name = "tree-sitter-nqc", url = "tree-sitter-grammars/tree-sitter-nqc", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-objc", url = "tree-sitter-grammars/tree-sitter-objc", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-objdump", url = "ColinKennedy/tree-sitter-objdump", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-ocaml", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-ocaml_interface", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-ocamllex", url = "atom-ocaml/tree-sitter-ocamllex", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-odin", url = "tree-sitter-grammars/tree-sitter-odin", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-org", url = "milisims/tree-sitter-org", @@ -1542,507 +1582,507 @@ return }, { name = "tree-sitter-pascal", url = "Isopod/tree-sitter-pascal", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-passwd", url = "ath3/tree-sitter-passwd", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-pem", url = "tree-sitter-grammars/tree-sitter-pem", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-perl", url = "tree-sitter-perl/tree-sitter-perl", - version = "0.0.4-1" + version = "0.0.12-1" }, { name = "tree-sitter-php", url = "tree-sitter/tree-sitter-php", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-php_only", url = "tree-sitter/tree-sitter-php", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-phpdoc", url = "claytonrcarter/tree-sitter-phpdoc", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-pioasm", url = "leo60228/tree-sitter-pioasm", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-po", url = "tree-sitter-grammars/tree-sitter-po", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-pod", url = "tree-sitter-perl/tree-sitter-pod", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-poe_filter", url = "tree-sitter-grammars/tree-sitter-poe-filter", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-pony", url = "tree-sitter-grammars/tree-sitter-pony", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-powershell", url = "airbus-cert/tree-sitter-powershell", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-printf", url = "tree-sitter-grammars/tree-sitter-printf", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-prisma", url = "victorhqc/tree-sitter-prisma", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-problog", url = "foxyseta/tree-sitter-prolog", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-prolog", url = "foxyseta/tree-sitter-prolog", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-promql", url = "MichaHoffmann/tree-sitter-promql", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-properties", url = "tree-sitter-grammars/tree-sitter-properties", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-proto", url = "treywood/tree-sitter-proto", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-prql", url = "PRQL/tree-sitter-prql", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-psv", url = "tree-sitter-grammars/tree-sitter-csv", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-pug", url = "zealot128/tree-sitter-pug", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-puppet", url = "tree-sitter-grammars/tree-sitter-puppet", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-purescript", url = "postsolar/tree-sitter-purescript", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-pymanifest", url = "tree-sitter-grammars/tree-sitter-pymanifest", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-python", url = "tree-sitter/tree-sitter-python", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-ql", url = "tree-sitter/tree-sitter-ql", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-qmldir", url = "tree-sitter-grammars/tree-sitter-qmldir", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-qmljs", url = "yuja/tree-sitter-qmljs", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-query", url = "tree-sitter-grammars/tree-sitter-query", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-r", url = "r-lib/tree-sitter-r", - version = "0.0.2-1" + version = "0.0.11-1" }, { name = "tree-sitter-racket", url = "6cdh/tree-sitter-racket", - version = "0.0.2-1" + version = "0.0.12-1" }, { name = "tree-sitter-ralph", url = "alephium/tree-sitter-ralph", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-rasi", url = "Fymyte/tree-sitter-rasi", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-rbs", url = "joker1007/tree-sitter-rbs", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-re2c", url = "tree-sitter-grammars/tree-sitter-re2c", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-readline", url = "tree-sitter-grammars/tree-sitter-readline", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-regex", url = "tree-sitter/tree-sitter-regex", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-rego", url = "FallenAngel97/tree-sitter-rego", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-requirements", url = "tree-sitter-grammars/tree-sitter-requirements", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-rescript", url = "rescript-lang/tree-sitter-rescript", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-rnoweb", url = "bamonroe/tree-sitter-rnoweb", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-robot", url = "Hubro/tree-sitter-robot", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-robots", url = "opa-oz/tree-sitter-robots-txt", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-roc", url = "faldor20/tree-sitter-roc", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-ron", url = "tree-sitter-grammars/tree-sitter-ron", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-rst", url = "stsewd/tree-sitter-rst", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-ruby", url = "tree-sitter/tree-sitter-ruby", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-rust", url = "tree-sitter/tree-sitter-rust", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-scala", url = "tree-sitter/tree-sitter-scala", - version = "0.0.3-1" + version = "0.0.13-1" }, { name = "tree-sitter-scfg", url = "rockorager/tree-sitter-scfg", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-scheme", url = "6cdh/tree-sitter-scheme", - version = "0.0.2-1" + version = "0.0.12-1" }, { name = "tree-sitter-scss", url = "serenadeai/tree-sitter-scss", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-sflog", url = "aheber/tree-sitter-sfapex", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-slang", url = "tree-sitter-grammars/tree-sitter-slang", - version = "0.0.3-1" + version = "0.0.11-1" }, { name = "tree-sitter-slint", url = "slint-ui/tree-sitter-slint", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-smali", url = "tree-sitter-grammars/tree-sitter-smali", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-smithy", url = "indoorvivants/tree-sitter-smithy", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-snakemake", url = "osthomas/tree-sitter-snakemake", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-solidity", url = "JoranHonig/tree-sitter-solidity", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-soql", url = "aheber/tree-sitter-sfapex", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-sosl", url = "aheber/tree-sitter-sfapex", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-sourcepawn", url = "nilshelmig/tree-sitter-sourcepawn", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-sparql", url = "GordianDziwis/tree-sitter-sparql", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-sql", url = "derekstride/tree-sitter-sql", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-squirrel", url = "tree-sitter-grammars/tree-sitter-squirrel", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-ssh_config", url = "tree-sitter-grammars/tree-sitter-ssh-config", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-starlark", url = "tree-sitter-grammars/tree-sitter-starlark", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-strace", url = "sigmaSd/tree-sitter-strace", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-styled", url = "mskelton/tree-sitter-styled", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-supercollider", url = "madskjeldgaard/tree-sitter-supercollider", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-surface", url = "connorlay/tree-sitter-surface", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-svelte", url = "tree-sitter-grammars/tree-sitter-svelte", - version = "0.0.3-1" + version = "0.0.12-1" }, { name = "tree-sitter-swift", url = "alex-pinkus/tree-sitter-swift", - version = "0.0.3-1" + version = "0.0.11-1" }, { name = "tree-sitter-sxhkdrc", url = "RaafatTurki/tree-sitter-sxhkdrc", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-systemtap", url = "ok-ryoko/tree-sitter-systemtap", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-systemverilog", url = "zhangwwpeng/tree-sitter-systemverilog", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-t32", url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/6182836f4128725f1e74ce986840d7317021a015.zip", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-tablegen", url = "tree-sitter-grammars/tree-sitter-tablegen", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-tact", url = "tact-lang/tree-sitter-tact", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-tcl", url = "tree-sitter-grammars/tree-sitter-tcl", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-teal", url = "euclidianAce/tree-sitter-teal", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-templ", url = "vrischmann/tree-sitter-templ", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-terraform", url = "MichaHoffmann/tree-sitter-hcl", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-textproto", url = "PorterAtGoogle/tree-sitter-textproto", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-thrift", url = "tree-sitter-grammars/tree-sitter-thrift", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-tiger", url = "ambroisie/tree-sitter-tiger", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-tlaplus", url = "tlaplus-community/tree-sitter-tlaplus", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-tmux", url = "Freed-Wu/tree-sitter-tmux", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-todotxt", url = "arnarg/tree-sitter-todotxt", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-toml", url = "tree-sitter-grammars/tree-sitter-toml", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-tsv", url = "tree-sitter-grammars/tree-sitter-csv", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-tsx", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-turtle", url = "GordianDziwis/tree-sitter-turtle", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-twig", url = "gbprod/tree-sitter-twig", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-typescript", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-typespec", url = "happenslol/tree-sitter-typespec", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-typoscript", url = "Teddytrombone/tree-sitter-typoscript", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-typst", url = "uben0/tree-sitter-typst", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-udev", url = "tree-sitter-grammars/tree-sitter-udev", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-ungrammar", url = "tree-sitter-grammars/tree-sitter-ungrammar", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-unison", url = "kylegoetz/tree-sitter-unison", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-usd", url = "ColinKennedy/tree-sitter-usd", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-uxntal", url = "tree-sitter-grammars/tree-sitter-uxntal", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-v", url = "vlang/v-analyzer", - version = "0.0.3-1" + version = "0.0.11-1" }, { name = "tree-sitter-vala", url = "vala-lang/tree-sitter-vala", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-vento", url = "ventojs/tree-sitter-vento", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-verilog", url = "tree-sitter/tree-sitter-verilog", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-vhdl", url = "jpt13653903/tree-sitter-vhdl", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-vhs", url = "charmbracelet/tree-sitter-vhs", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-vim", url = "tree-sitter-grammars/tree-sitter-vim", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-vimdoc", url = "neovim/tree-sitter-vimdoc", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-vrl", url = "belltoy/tree-sitter-vrl", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-vue", url = "tree-sitter-grammars/tree-sitter-vue", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-wgsl", url = "szebniok/tree-sitter-wgsl", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-wgsl_bevy", url = "tree-sitter-grammars/tree-sitter-wgsl-bevy", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-wing", url = "winglang/tree-sitter-wing", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-wit", url = "liamwh/tree-sitter-wit", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-xcompose", url = "tree-sitter-grammars/tree-sitter-xcompose", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-xml", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-yaml", url = "tree-sitter-grammars/tree-sitter-yaml", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-yang", url = "Hubro/tree-sitter-yang", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-yuck", url = "tree-sitter-grammars/tree-sitter-yuck", - version = "0.0.2-1" + version = "0.0.10-1" }, { name = "tree-sitter-zathurarc", url = "Freed-Wu/tree-sitter-zathurarc", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "tree-sitter-zig", url = "tree-sitter-grammars/tree-sitter-zig", - version = "0.0.3-1" + version = "0.0.10-1" }, { name = "trouble.nvim", url = "folke/trouble.nvim", @@ -2086,7 +2126,7 @@ return }, { name = "yazi.nvim", url = "mikavilpas/yazi.nvim", - version = "6.0.4-1" + version = "6.1.0-1" }, { name = "zen-mode.nvim", url = "folke/zen-mode.nvim", From e9fd76e239cc18da289f9a3f80f35fa16b003175 Mon Sep 17 00:00:00 2001 From: Luna Saphie Mittelbach Date: Wed, 2 Oct 2024 09:52:51 +0200 Subject: [PATCH 774/815] fix(completion): check if command string is a prefix of Lazy (#1760) Problem: Command completion doesn't work if the command name isn't written in full Solution: Use vim.startswith to check if the command is a prefix of 'Lazy' Fixes #1758 --- lua/lazy/view/commands.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/commands.lua b/lua/lazy/view/commands.lua index 9791924..fd4af3d 100644 --- a/lua/lazy/view/commands.lua +++ b/lua/lazy/view/commands.lua @@ -146,7 +146,7 @@ end ---@return string, string[] function M.parse(args) local parts = vim.split(vim.trim(args), "%s+") - if parts[1]:find("Lazy") then + if vim.startswith("Lazy", parts[1]) then table.remove(parts, 1) end if args:sub(-1) == " " then From 1159bdccd8910a0fd0914b24d6c3d186689023d9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 2 Oct 2024 07:54:44 +0000 Subject: [PATCH 775/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 676 +++++++++++++++--------------- 1 file changed, 346 insertions(+), 330 deletions(-) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index 6b1d4fb..558ff33 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -18,7 +18,7 @@ return }, { name = "ai.nvim", url = "S1M0N38/ai.nvim", - version = "1.2.0-1" + version = "1.3.0-1" }, { name = "astral.nvim", url = "rootiest/astral.nvim", @@ -106,7 +106,7 @@ return }, { name = "dante.nvim", url = "S1M0N38/dante.nvim", - version = "1.0.1-1" + version = "1.2.0-1" }, { name = "daylight.nvim", url = "NTBBloodbath/daylight.nvim", @@ -138,11 +138,11 @@ return }, { name = "donut.nvim", url = "NStefan002/donut.nvim", - version = "2.1.0-1" + version = "2.2.1-1" }, { name = "dressing.nvim", url = "stevearc/dressing.nvim", - version = "2.2.2-1" + version = "3.0.0-1" }, { name = "dropbar.nvim", url = "Bekaboo/dropbar.nvim", @@ -167,6 +167,10 @@ return name = "elixir-tools.nvim", url = "elixir-tools/elixir-tools.nvim", version = "0.16.0-1" + }, { + name = "feed.nvim", + url = "noearc/feed.nvim", + version = "main-1" }, { name = "feline.nvim", url = "freddiehaddad/feline.nvim", @@ -226,7 +230,7 @@ return }, { name = "git.nvim", url = "Kibadda/git.nvim", - version = "3.3.2-1" + version = "4.1.0-1" }, { name = "github-nvim-theme", url = "projekt0n/github-nvim-theme", @@ -234,7 +238,7 @@ return }, { name = "gitlinker.nvim", url = "linrongbin16/gitlinker.nvim", - version = "4.13.1-1" + version = "4.13.2-1" }, { name = "gitsigns.nvim", url = "lewis6991/gitsigns.nvim", @@ -270,7 +274,7 @@ return }, { name = "haskell-tools.nvim", url = "mrcjkb/haskell-tools.nvim", - version = "4.0.1-1" + version = "4.1.0-1" }, { name = "headlines.nvim", url = "lukas-reineke/headlines.nvim", @@ -294,7 +298,7 @@ return }, { name = "hotpot.nvim", url = "rktjmp/hotpot.nvim", - version = "0.14.5-1" + version = "0.14.7-1" }, { name = "hurl.nvim", url = "jellydn/hurl.nvim", @@ -334,7 +338,7 @@ return }, { name = "lean.nvim", url = "Julian/lean.nvim", - version = "1.0.0-1" + version = "2024.9.2-1" }, { name = "leetcode.nvim", url = "kawre/leetcode.nvim", @@ -346,7 +350,7 @@ return }, { name = "live-command.nvim", url = "smjonas/live-command.nvim", - version = "2.0.0-1" + version = "2.2.0-1" }, { name = "logging.nvim", url = "NTBBloodbath/logging.nvim", @@ -446,7 +450,7 @@ return }, { name = "neoconf.nvim", url = "folke/neoconf.nvim", - version = "1.3.2-1" + version = "1.3.3-1" }, { name = "neodev.nvim", url = "folke/neodev.nvim", @@ -490,7 +494,7 @@ return }, { name = "neotest", url = "nvim-neotest/neotest", - version = "5.4.1-1" + version = "5.6.0-1" }, { name = "neotest-busted", url = "MisanthropicBit/neotest-busted", @@ -498,7 +502,7 @@ return }, { name = "neotest-golang", url = "fredrikaverpil/neotest-golang", - version = "1.1.1-1" + version = "1.2.0-1" }, { name = "neotest-haskell", url = "mrcjkb/neotest-haskell", @@ -506,7 +510,7 @@ return }, { name = "neotest-java", url = "rcasia/neotest-java", - version = "0.15.6-1" + version = "0.16.0-1" }, { name = "netman.nvim", url = "miversen33/netman.nvim", @@ -518,11 +522,11 @@ return }, { name = "no-neck-pain.nvim", url = "shortcuts/no-neck-pain.nvim", - version = "2.0.1-1" + version = "2.0.5-1" }, { name = "noice.nvim", url = "folke/noice.nvim", - version = "4.5.0-1" + version = "4.5.1-1" }, { name = "npackages.nvim", url = "diegofigs/npackages.nvim", @@ -535,6 +539,10 @@ return name = "nui.nvim", url = "MunifTanjim/nui.nvim", version = "0.3.0-1" + }, { + name = "nvim-a2-pack", + url = "dfgordon/nvim-a2-pack", + version = "0.0.2-1" }, { name = "nvim-bqf", url = "kevinhwang91/nvim-bqf", @@ -610,7 +618,7 @@ return }, { name = "nvim-notify", url = "rcarriga/nvim-notify", - version = "3.13.5-1" + version = "3.14.0-1" }, { name = "nvim-parinfer", url = "gpanders/nvim-parinfer", @@ -626,7 +634,7 @@ return }, { name = "nvim-scrollview", url = "dstein64/nvim-scrollview", - version = "5.2.1-1" + version = "5.2.2-1" }, { name = "nvim-smuggler", url = "Klafyvel/nvim-smuggler", @@ -734,7 +742,7 @@ return }, { name = "quarry.nvim", url = "rudionrails/quarry.nvim", - version = "2.3.0-1" + version = "3.0.1-1" }, { name = "quicker.nvim", url = "stevearc/quicker.nvim", @@ -742,7 +750,7 @@ return }, { name = "rainbow-delimiters.nvim", url = "HiPhish/rainbow-delimiters.nvim", - version = "0.6.1-1" + version = "0.6.2-1" }, { name = "remember.nvim", url = "vladdoster/remember.nvim", @@ -754,15 +762,19 @@ return }, { name = "render-markdown.nvim", url = "MeanderingProgrammer/render-markdown.nvim", - version = "7.0.0-1" + version = "7.2.0-1" }, { name = "rest.nvim", url = "rest-nvim/rest.nvim", - version = "3.7.0-1" + version = "3.8.2-1" + }, { + name = "rime.nvim", + url = "Freed-Wu/rime.nvim", + version = "0.0.1-1" }, { name = "rocks-config.nvim", url = "nvim-neorocks/rocks-config.nvim", - version = "2.3.1-1" + version = "3.0.0-1" }, { name = "rocks-dev.nvim", url = "nvim-neorocks/rocks-dev.nvim", @@ -770,19 +782,19 @@ return }, { name = "rocks-git.nvim", url = "nvim-neorocks/rocks-git.nvim", - version = "2.2.0-1" + version = "2.3.1-1" }, { name = "rocks-lazy.nvim", url = "nvim-neorocks/rocks-lazy.nvim", - version = "1.0.1-1" + version = "1.1.0-1" }, { name = "rocks-treesitter.nvim", url = "nvim-neorocks/rocks-treesitter.nvim", - version = "1.1.2-1" + version = "1.1.3-1" }, { name = "rocks.nvim", url = "nvim-neorocks/rocks.nvim", - version = "2.40.0-1" + version = "2.40.2-1" }, { name = "rtp.nvim", url = "nvim-neorocks/rtp.nvim", @@ -790,11 +802,11 @@ return }, { name = "runt.nvim", url = "Julian/runt.nvim", - version = "2024.9.2-1" + version = "2024.10.1-1" }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "5.4.2-1" + version = "5.11.0-1" }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", @@ -814,7 +826,7 @@ return }, { name = "sf.nvim", url = "xixiaofinland/sf.nvim", - version = "1.6.0-1" + version = "1.7.0-1" }, { name = "sg.nvim", url = "sourcegraph/sg.nvim", @@ -870,7 +882,7 @@ return }, { name = "todo-comments.nvim", url = "folke/todo-comments.nvim", - version = "1.3.0-1" + version = "1.4.0-1" }, { name = "toggleterm.nvim", url = "akinsho/toggleterm.nvim", @@ -882,659 +894,663 @@ return }, { name = "tree-sitter-ada", url = "briot/tree-sitter-ada", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-agda", url = "tree-sitter/tree-sitter-agda", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-angular", url = "dlvandenberg/tree-sitter-angular", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-apex", url = "aheber/tree-sitter-sfapex", - version = "0.0.10-1" + version = "0.0.26-1" }, { name = "tree-sitter-arduino", url = "tree-sitter-grammars/tree-sitter-arduino", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-asm", url = "RubixDev/tree-sitter-asm", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-astro", url = "virchau13/tree-sitter-astro", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-authzed", url = "mleonidas/tree-sitter-authzed", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-awk", url = "Beaglefoot/tree-sitter-awk", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-bash", url = "tree-sitter/tree-sitter-bash", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-bass", url = "vito/tree-sitter-bass", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-beancount", url = "polarmutex/tree-sitter-beancount", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-bibtex", url = "latex-lsp/tree-sitter-bibtex", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-bicep", url = "tree-sitter-grammars/tree-sitter-bicep", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-bitbake", url = "tree-sitter-grammars/tree-sitter-bitbake", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-blueprint", url = "https://gitlab.com/gabmus/tree-sitter-blueprint/-/archive/60ba73739c6083c693d86a1a7cf039c07eb4ed59.zip", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-bp", url = "ambroisie/tree-sitter-bp", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-c", url = "tree-sitter/tree-sitter-c", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-c_sharp", url = "tree-sitter/tree-sitter-c-sharp", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-cairo", url = "tree-sitter-grammars/tree-sitter-cairo", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-capnp", url = "tree-sitter-grammars/tree-sitter-capnp", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-chatito", url = "tree-sitter-grammars/tree-sitter-chatito", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-clojure", url = "sogaiu/tree-sitter-clojure", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-cmake", url = "uyha/tree-sitter-cmake", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-comment", url = "stsewd/tree-sitter-comment", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-commonlisp", url = "tree-sitter-grammars/tree-sitter-commonlisp", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-cooklang", url = "addcninblue/tree-sitter-cooklang", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-corn", url = "jakestanger/tree-sitter-corn", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-cpon", url = "tree-sitter-grammars/tree-sitter-cpon", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-cpp", url = "tree-sitter/tree-sitter-cpp", - version = "0.0.10-1" + version = "0.0.26-1" }, { name = "tree-sitter-css", url = "tree-sitter/tree-sitter-css", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-csv", url = "tree-sitter-grammars/tree-sitter-csv", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-cuda", url = "tree-sitter-grammars/tree-sitter-cuda", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-cue", url = "eonpatapon/tree-sitter-cue", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-d", url = "gdamore/tree-sitter-d", - version = "0.0.10-1" + version = "0.0.28-1" }, { name = "tree-sitter-dart", url = "UserNobody14/tree-sitter-dart", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-devicetree", url = "joelspadin/tree-sitter-devicetree", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-dhall", url = "jbellerb/tree-sitter-dhall", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-diff", url = "the-mikedavis/tree-sitter-diff", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-disassembly", url = "ColinKennedy/tree-sitter-disassembly", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-djot", url = "treeman/tree-sitter-djot", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-dockerfile", url = "camdencheek/tree-sitter-dockerfile", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-dot", url = "rydesun/tree-sitter-dot", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-doxygen", url = "tree-sitter-grammars/tree-sitter-doxygen", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-dtd", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-earthfile", url = "glehmann/tree-sitter-earthfile", - version = "0.0.12-1" + version = "0.0.26-1" }, { name = "tree-sitter-ebnf", url = "RubixDev/ebnf", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-ecma", url = "nvim-neorocks/luarocks-stub", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-editorconfig", url = "ValdezFOmar/tree-sitter-editorconfig", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-eds", url = "uyha/tree-sitter-eds", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-eex", url = "connorlay/tree-sitter-eex", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-elixir", url = "elixir-lang/tree-sitter-elixir", - version = "0.0.11-1" + version = "0.0.26-1" }, { name = "tree-sitter-elm", url = "elm-tooling/tree-sitter-elm", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-elsa", url = "glapa-grossklag/tree-sitter-elsa", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-elvish", url = "elves/tree-sitter-elvish", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-embedded_template", url = "tree-sitter/tree-sitter-embedded-template", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-erlang", url = "WhatsApp/tree-sitter-erlang", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-facility", url = "FacilityApi/tree-sitter-facility", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-faust", url = "khiner/tree-sitter-faust", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-fennel", url = "alexmozaidze/tree-sitter-fennel", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-fidl", url = "google/tree-sitter-fidl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-firrtl", url = "tree-sitter-grammars/tree-sitter-firrtl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-fish", url = "ram02z/tree-sitter-fish", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-foam", url = "FoamScience/tree-sitter-foam", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-forth", url = "AlexanderBrevig/tree-sitter-forth", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-fortran", url = "stadelmanma/tree-sitter-fortran", - version = "0.0.10-1" + version = "0.0.27-1" }, { name = "tree-sitter-fsh", url = "mgramigna/tree-sitter-fsh", - version = "0.0.10-1" + version = "0.0.24-1" + }, { + name = "tree-sitter-fsharp", + url = "ionide/tree-sitter-fsharp", + version = "0.0.2-1" }, { name = "tree-sitter-func", url = "tree-sitter-grammars/tree-sitter-func", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-fusion", url = "https://gitlab.com/jirgn/tree-sitter-fusion/-/archive/19db2f47ba4c3a0f6238d4ae0e2abfca16e61dd6.zip", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gap", url = "gap-system/tree-sitter-gap", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gaptst", url = "gap-system/tree-sitter-gaptst", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gdscript", url = "PrestonKnopp/tree-sitter-gdscript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gdshader", url = "GodOfAvacyn/tree-sitter-gdshader", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-git_config", url = "the-mikedavis/tree-sitter-git-config", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-git_rebase", url = "the-mikedavis/tree-sitter-git-rebase", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gitattributes", url = "tree-sitter-grammars/tree-sitter-gitattributes", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gitcommit", url = "gbprod/tree-sitter-gitcommit", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gitignore", url = "shunsambongi/tree-sitter-gitignore", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gleam", url = "gleam-lang/tree-sitter-gleam", - version = "0.0.11-1" + version = "0.0.26-1" }, { name = "tree-sitter-glimmer", url = "ember-tooling/tree-sitter-glimmer", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-glimmer_javascript", url = "NullVoxPopuli/tree-sitter-glimmer-javascript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-glimmer_typescript", url = "NullVoxPopuli/tree-sitter-glimmer-typescript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-glsl", url = "tree-sitter-grammars/tree-sitter-glsl", - version = "0.0.11-1" + version = "0.0.25-1" }, { name = "tree-sitter-gn", url = "tree-sitter-grammars/tree-sitter-gn", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gnuplot", url = "dpezto/tree-sitter-gnuplot", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-go", url = "tree-sitter/tree-sitter-go", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-goctl", url = "chaozwn/tree-sitter-goctl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-godot_resource", url = "PrestonKnopp/tree-sitter-godot-resource", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gomod", url = "camdencheek/tree-sitter-go-mod", - version = "0.0.11-1" + version = "0.0.25-1" }, { name = "tree-sitter-gosum", url = "tree-sitter-grammars/tree-sitter-go-sum", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gotmpl", url = "ngalaiko/tree-sitter-go-template", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gowork", url = "omertuc/tree-sitter-go-work", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gpg", url = "tree-sitter-grammars/tree-sitter-gpg-config", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-graphql", url = "bkegley/tree-sitter-graphql", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-groovy", url = "murtaza64/tree-sitter-groovy", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-gstlaunch", url = "tree-sitter-grammars/tree-sitter-gstlaunch", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-hack", url = "slackhq/tree-sitter-hack", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-hare", url = "tree-sitter-grammars/tree-sitter-hare", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-haskell", url = "tree-sitter/tree-sitter-haskell", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-haskell_persistent", url = "MercuryTechnologies/tree-sitter-haskell-persistent", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-hcl", url = "tree-sitter-grammars/tree-sitter-hcl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-heex", url = "connorlay/tree-sitter-heex", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-helm", url = "ngalaiko/tree-sitter-go-template", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-hjson", url = "winston0410/tree-sitter-hjson", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-hlsl", url = "tree-sitter-grammars/tree-sitter-hlsl", - version = "0.0.11-1" + version = "0.0.25-1" }, { name = "tree-sitter-hlsplaylist", url = "Freed-Wu/tree-sitter-hlsplaylist", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-hocon", url = "antosha417/tree-sitter-hocon", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-hoon", url = "urbit-pilled/tree-sitter-hoon", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-html", url = "tree-sitter/tree-sitter-html", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-html_tags", url = "nvim-neorocks/luarocks-stub", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-htmldjango", url = "interdependence/tree-sitter-htmldjango", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-http", url = "rest-nvim/tree-sitter-http", - version = "0.0.10-1" + version = "0.0.26-1" }, { name = "tree-sitter-hurl", url = "pfeiferj/tree-sitter-hurl", - version = "0.0.11-1" + version = "0.0.25-1" }, { name = "tree-sitter-hyprlang", url = "tree-sitter-grammars/tree-sitter-hyprlang", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-idl", url = "cathaysia/tree-sitter-idl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-ini", url = "justinmk/tree-sitter-ini", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-inko", url = "inko-lang/tree-sitter-inko", - version = "0.0.10-1" + version = "0.0.26-1" }, { name = "tree-sitter-ispc", url = "tree-sitter-grammars/tree-sitter-ispc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-janet_simple", url = "sogaiu/tree-sitter-janet-simple", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-java", url = "tree-sitter/tree-sitter-java", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-javascript", url = "tree-sitter/tree-sitter-javascript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-jq", url = "flurie/tree-sitter-jq", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-jsdoc", url = "tree-sitter/tree-sitter-jsdoc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-json", url = "tree-sitter/tree-sitter-json", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-json5", url = "Joakker/tree-sitter-json5", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-jsonc", url = "https://gitlab.com/WhyNotHugo/tree-sitter-jsonc/-/archive/02b01653c8a1c198ae7287d566efa86a135b30d5.zip", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-jsonnet", url = "sourcegraph/tree-sitter-jsonnet", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-jsx", url = "nvim-neorocks/luarocks-stub", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-julia", url = "tree-sitter/tree-sitter-julia", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-just", url = "IndianBoy42/tree-sitter-just", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-kconfig", url = "tree-sitter-grammars/tree-sitter-kconfig", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-kdl", url = "tree-sitter-grammars/tree-sitter-kdl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-kotlin", url = "fwcd/tree-sitter-kotlin", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-koto", url = "koto-lang/tree-sitter-koto", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-kusto", url = "Willem-J-an/tree-sitter-kusto", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-lalrpop", url = "traxys/tree-sitter-lalrpop", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-latex", url = "latex-lsp/tree-sitter-latex", - version = "0.0.11-1" + version = "0.0.25-1" }, { name = "tree-sitter-ledger", url = "cbarrete/tree-sitter-ledger", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-leo", url = "r001/tree-sitter-leo", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-linkerscript", url = "tree-sitter-grammars/tree-sitter-linkerscript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-liquid", url = "hankthetank27/tree-sitter-liquid", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-liquidsoap", url = "savonet/tree-sitter-liquidsoap", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-llvm", url = "benwilliamgraham/tree-sitter-llvm", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-lua", url = "tree-sitter-grammars/tree-sitter-lua", - version = "0.0.11-1" + version = "0.0.25-1" }, { name = "tree-sitter-luadoc", url = "tree-sitter-grammars/tree-sitter-luadoc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-luap", url = "tree-sitter-grammars/tree-sitter-luap", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-luau", url = "tree-sitter-grammars/tree-sitter-luau", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-m68k", url = "grahambates/tree-sitter-m68k", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-make", url = "alemuller/tree-sitter-make", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-markdown", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.13-1" + version = "0.0.28-1" }, { name = "tree-sitter-markdown_inline", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.13-1" + version = "0.0.28-1" }, { name = "tree-sitter-matlab", url = "acristoffers/tree-sitter-matlab", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-menhir", url = "Kerl13/tree-sitter-menhir", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-mermaid", url = "monaqa/tree-sitter-mermaid", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-meson", url = "tree-sitter-grammars/tree-sitter-meson", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-mlir", url = "artagnon/tree-sitter-mlir", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-muttrc", url = "neomutt/tree-sitter-muttrc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-nasm", url = "naclsn/tree-sitter-nasm", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-nginx", url = "opa-oz/tree-sitter-nginx", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-nickel", url = "nickel-lang/tree-sitter-nickel", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-nim", url = "alaviss/tree-sitter-nim", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-nim_format_string", url = "aMOPel/tree-sitter-nim-format-string", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-ninja", url = "alemuller/tree-sitter-ninja", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-nix", url = "cstrahan/tree-sitter-nix", - version = "0.0.10-1" + version = "0.0.29-1" }, { name = "tree-sitter-norg", url = "nvim-neorg/tree-sitter-norg", @@ -1546,31 +1562,31 @@ return }, { name = "tree-sitter-nqc", url = "tree-sitter-grammars/tree-sitter-nqc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-objc", url = "tree-sitter-grammars/tree-sitter-objc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-objdump", url = "ColinKennedy/tree-sitter-objdump", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-ocaml", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.10-1" + version = "0.0.27-1" }, { name = "tree-sitter-ocaml_interface", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.10-1" + version = "0.0.27-1" }, { name = "tree-sitter-ocamllex", url = "atom-ocaml/tree-sitter-ocamllex", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-odin", url = "tree-sitter-grammars/tree-sitter-odin", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-org", url = "milisims/tree-sitter-org", @@ -1582,507 +1598,507 @@ return }, { name = "tree-sitter-pascal", url = "Isopod/tree-sitter-pascal", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-passwd", url = "ath3/tree-sitter-passwd", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-pem", url = "tree-sitter-grammars/tree-sitter-pem", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-perl", url = "tree-sitter-perl/tree-sitter-perl", - version = "0.0.12-1" + version = "0.0.28-1" }, { name = "tree-sitter-php", url = "tree-sitter/tree-sitter-php", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-php_only", url = "tree-sitter/tree-sitter-php", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-phpdoc", url = "claytonrcarter/tree-sitter-phpdoc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-pioasm", url = "leo60228/tree-sitter-pioasm", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-po", url = "tree-sitter-grammars/tree-sitter-po", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-pod", url = "tree-sitter-perl/tree-sitter-pod", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-poe_filter", url = "tree-sitter-grammars/tree-sitter-poe-filter", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-pony", url = "tree-sitter-grammars/tree-sitter-pony", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-powershell", url = "airbus-cert/tree-sitter-powershell", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-printf", url = "tree-sitter-grammars/tree-sitter-printf", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-prisma", url = "victorhqc/tree-sitter-prisma", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-problog", url = "foxyseta/tree-sitter-prolog", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-prolog", url = "foxyseta/tree-sitter-prolog", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-promql", url = "MichaHoffmann/tree-sitter-promql", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-properties", url = "tree-sitter-grammars/tree-sitter-properties", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-proto", url = "treywood/tree-sitter-proto", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-prql", url = "PRQL/tree-sitter-prql", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-psv", url = "tree-sitter-grammars/tree-sitter-csv", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-pug", url = "zealot128/tree-sitter-pug", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-puppet", url = "tree-sitter-grammars/tree-sitter-puppet", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-purescript", url = "postsolar/tree-sitter-purescript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-pymanifest", url = "tree-sitter-grammars/tree-sitter-pymanifest", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-python", url = "tree-sitter/tree-sitter-python", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-ql", url = "tree-sitter/tree-sitter-ql", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-qmldir", url = "tree-sitter-grammars/tree-sitter-qmldir", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-qmljs", url = "yuja/tree-sitter-qmljs", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-query", url = "tree-sitter-grammars/tree-sitter-query", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-r", url = "r-lib/tree-sitter-r", - version = "0.0.11-1" + version = "0.0.26-1" }, { name = "tree-sitter-racket", url = "6cdh/tree-sitter-racket", - version = "0.0.12-1" + version = "0.0.26-1" }, { name = "tree-sitter-ralph", url = "alephium/tree-sitter-ralph", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-rasi", url = "Fymyte/tree-sitter-rasi", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-rbs", url = "joker1007/tree-sitter-rbs", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-re2c", url = "tree-sitter-grammars/tree-sitter-re2c", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-readline", url = "tree-sitter-grammars/tree-sitter-readline", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-regex", url = "tree-sitter/tree-sitter-regex", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-rego", url = "FallenAngel97/tree-sitter-rego", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-requirements", url = "tree-sitter-grammars/tree-sitter-requirements", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-rescript", url = "rescript-lang/tree-sitter-rescript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-rnoweb", url = "bamonroe/tree-sitter-rnoweb", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-robot", url = "Hubro/tree-sitter-robot", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-robots", url = "opa-oz/tree-sitter-robots-txt", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-roc", url = "faldor20/tree-sitter-roc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-ron", url = "tree-sitter-grammars/tree-sitter-ron", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-rst", url = "stsewd/tree-sitter-rst", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-ruby", url = "tree-sitter/tree-sitter-ruby", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-rust", url = "tree-sitter/tree-sitter-rust", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-scala", url = "tree-sitter/tree-sitter-scala", - version = "0.0.13-1" + version = "0.0.27-1" }, { name = "tree-sitter-scfg", url = "rockorager/tree-sitter-scfg", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-scheme", url = "6cdh/tree-sitter-scheme", - version = "0.0.12-1" + version = "0.0.26-1" }, { name = "tree-sitter-scss", url = "serenadeai/tree-sitter-scss", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-sflog", url = "aheber/tree-sitter-sfapex", - version = "0.0.10-1" + version = "0.0.26-1" }, { name = "tree-sitter-slang", url = "tree-sitter-grammars/tree-sitter-slang", - version = "0.0.11-1" + version = "0.0.25-1" }, { name = "tree-sitter-slint", url = "slint-ui/tree-sitter-slint", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-smali", url = "tree-sitter-grammars/tree-sitter-smali", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-smithy", url = "indoorvivants/tree-sitter-smithy", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-snakemake", url = "osthomas/tree-sitter-snakemake", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-solidity", url = "JoranHonig/tree-sitter-solidity", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-soql", url = "aheber/tree-sitter-sfapex", - version = "0.0.10-1" + version = "0.0.26-1" }, { name = "tree-sitter-sosl", url = "aheber/tree-sitter-sfapex", - version = "0.0.10-1" + version = "0.0.26-1" }, { name = "tree-sitter-sourcepawn", url = "nilshelmig/tree-sitter-sourcepawn", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-sparql", url = "GordianDziwis/tree-sitter-sparql", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-sql", url = "derekstride/tree-sitter-sql", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-squirrel", url = "tree-sitter-grammars/tree-sitter-squirrel", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-ssh_config", url = "tree-sitter-grammars/tree-sitter-ssh-config", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-starlark", url = "tree-sitter-grammars/tree-sitter-starlark", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-strace", url = "sigmaSd/tree-sitter-strace", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-styled", url = "mskelton/tree-sitter-styled", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-supercollider", url = "madskjeldgaard/tree-sitter-supercollider", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-surface", url = "connorlay/tree-sitter-surface", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-svelte", url = "tree-sitter-grammars/tree-sitter-svelte", - version = "0.0.12-1" + version = "0.0.26-1" }, { name = "tree-sitter-swift", url = "alex-pinkus/tree-sitter-swift", - version = "0.0.11-1" + version = "0.0.26-1" }, { name = "tree-sitter-sxhkdrc", url = "RaafatTurki/tree-sitter-sxhkdrc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-systemtap", url = "ok-ryoko/tree-sitter-systemtap", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-systemverilog", url = "zhangwwpeng/tree-sitter-systemverilog", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-t32", url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/6182836f4128725f1e74ce986840d7317021a015.zip", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-tablegen", url = "tree-sitter-grammars/tree-sitter-tablegen", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-tact", url = "tact-lang/tree-sitter-tact", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "tree-sitter-tcl", url = "tree-sitter-grammars/tree-sitter-tcl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-teal", url = "euclidianAce/tree-sitter-teal", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-templ", url = "vrischmann/tree-sitter-templ", - version = "0.0.10-1" + version = "0.0.26-1" }, { name = "tree-sitter-terraform", url = "MichaHoffmann/tree-sitter-hcl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-textproto", url = "PorterAtGoogle/tree-sitter-textproto", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-thrift", url = "tree-sitter-grammars/tree-sitter-thrift", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-tiger", url = "ambroisie/tree-sitter-tiger", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-tlaplus", url = "tlaplus-community/tree-sitter-tlaplus", - version = "0.0.10-1" + version = "0.0.26-1" }, { name = "tree-sitter-tmux", url = "Freed-Wu/tree-sitter-tmux", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-todotxt", url = "arnarg/tree-sitter-todotxt", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-toml", url = "tree-sitter-grammars/tree-sitter-toml", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-tsv", url = "tree-sitter-grammars/tree-sitter-csv", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-tsx", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-turtle", url = "GordianDziwis/tree-sitter-turtle", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-twig", url = "gbprod/tree-sitter-twig", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-typescript", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-typespec", url = "happenslol/tree-sitter-typespec", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-typoscript", url = "Teddytrombone/tree-sitter-typoscript", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-typst", url = "uben0/tree-sitter-typst", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-udev", url = "tree-sitter-grammars/tree-sitter-udev", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-ungrammar", url = "tree-sitter-grammars/tree-sitter-ungrammar", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-unison", url = "kylegoetz/tree-sitter-unison", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-usd", url = "ColinKennedy/tree-sitter-usd", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-uxntal", url = "tree-sitter-grammars/tree-sitter-uxntal", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-v", url = "vlang/v-analyzer", - version = "0.0.11-1" + version = "0.0.27-1" }, { name = "tree-sitter-vala", url = "vala-lang/tree-sitter-vala", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-vento", url = "ventojs/tree-sitter-vento", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-verilog", url = "tree-sitter/tree-sitter-verilog", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-vhdl", url = "jpt13653903/tree-sitter-vhdl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-vhs", url = "charmbracelet/tree-sitter-vhs", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-vim", url = "tree-sitter-grammars/tree-sitter-vim", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-vimdoc", url = "neovim/tree-sitter-vimdoc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-vrl", url = "belltoy/tree-sitter-vrl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-vue", url = "tree-sitter-grammars/tree-sitter-vue", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-wgsl", url = "szebniok/tree-sitter-wgsl", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-wgsl_bevy", url = "tree-sitter-grammars/tree-sitter-wgsl-bevy", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-wing", url = "winglang/tree-sitter-wing", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-wit", url = "liamwh/tree-sitter-wit", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-xcompose", url = "tree-sitter-grammars/tree-sitter-xcompose", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-xml", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-yaml", url = "tree-sitter-grammars/tree-sitter-yaml", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-yang", url = "Hubro/tree-sitter-yang", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-yuck", url = "tree-sitter-grammars/tree-sitter-yuck", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-zathurarc", url = "Freed-Wu/tree-sitter-zathurarc", - version = "0.0.10-1" + version = "0.0.24-1" }, { name = "tree-sitter-zig", url = "tree-sitter-grammars/tree-sitter-zig", - version = "0.0.10-1" + version = "0.0.25-1" }, { name = "trouble.nvim", url = "folke/trouble.nvim", @@ -2110,7 +2126,7 @@ return }, { name = "which-key.nvim", url = "folke/which-key.nvim", - version = "3.13.2-1" + version = "3.13.3-1" }, { name = "windline.nvim", url = "windwp/windline.nvim", @@ -2126,7 +2142,7 @@ return }, { name = "yazi.nvim", url = "mikavilpas/yazi.nvim", - version = "6.1.0-1" + version = "6.3.0-1" }, { name = "zen-mode.nvim", url = "folke/zen-mode.nvim", From 40dab7450e6da28364539664d9f51be596b4686b Mon Sep 17 00:00:00 2001 From: Lorenzo Zabot Date: Tue, 22 Oct 2024 12:43:33 +0200 Subject: [PATCH 776/815] style(typos): correct a few typos (#1776) ## Description This PR just fixes a few typos :) `dont => don't` ## Related Issue(s) ## Screenshots --- lua/lazy/core/config.lua | 2 +- lua/lazy/manage/task/git.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 16cc012..5bb1d91 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -218,7 +218,7 @@ M.defaults = { enabled = true, root = vim.fn.stdpath("state") .. "/lazy/readme", files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs + -- only generate markdown helptags for plugins that don't have docs skip_if_doc_exists = true, }, state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things diff --git a/lua/lazy/manage/task/git.lua b/lua/lazy/manage/task/git.lua index c54c809..ef848f9 100644 --- a/lua/lazy/manage/task/git.lua +++ b/lua/lazy/manage/task/git.lua @@ -335,7 +335,7 @@ M.checkout = { end end - -- dont run checkout if target is already reached. + -- don't run checkout if target is already reached. -- unless we just cloned, since then we won't have any data yet if Git.eq(info, target) and info.branch == target.branch then self.plugin._.updated = { From cf8ecc2c5e4332760431a33534240b0cbc6680ab Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 22 Oct 2024 10:47:57 +0000 Subject: [PATCH 777/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 700 ++++++++++++++++-------------- 1 file changed, 374 insertions(+), 326 deletions(-) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index 558ff33..c105756 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -14,7 +14,7 @@ return }, { name = "aerial.nvim", url = "stevearc/aerial.nvim", - version = "2.3.0-1" + version = "2.3.1-1" }, { name = "ai.nvim", url = "S1M0N38/ai.nvim", @@ -115,6 +115,10 @@ return name = "deadcolumn.nvim", url = "Bekaboo/deadcolumn.nvim", version = "1.0.0-1" + }, { + name = "decasify.nvim", + url = "alerque/decasify", + version = "0.7.3-1" }, { name = "decipher.nvim", url = "MisanthropicBit/decipher.nvim", @@ -139,6 +143,10 @@ return name = "donut.nvim", url = "NStefan002/donut.nvim", version = "2.2.1-1" + }, { + name = "doris.nvim", + url = "jackokring/doris.nvim", + version = "0.0.0-1" }, { name = "dressing.nvim", url = "stevearc/dressing.nvim", @@ -166,11 +174,11 @@ return }, { name = "elixir-tools.nvim", url = "elixir-tools/elixir-tools.nvim", - version = "0.16.0-1" + version = "0.16.1-1" }, { name = "feed.nvim", - url = "noearc/feed.nvim", - version = "main-1" + url = "neo451/feed.nvim", + version = "1.5.1-1" }, { name = "feline.nvim", url = "freddiehaddad/feline.nvim", @@ -230,7 +238,7 @@ return }, { name = "git.nvim", url = "Kibadda/git.nvim", - version = "4.1.0-1" + version = "5.0.1-1" }, { name = "github-nvim-theme", url = "projekt0n/github-nvim-theme", @@ -263,6 +271,10 @@ return name = "gruvbox.nvim", url = "ellisonleao/gruvbox.nvim", version = "2.0.0-1" + }, { + name = "guard.nvim", + url = "nvimdev/guard.nvim", + version = "1.0.1-1" }, { name = "hardhat.nvim", url = "TheSnakeWitcher/hardhat.nvim", @@ -274,7 +286,7 @@ return }, { name = "haskell-tools.nvim", url = "mrcjkb/haskell-tools.nvim", - version = "4.1.0-1" + version = "4.3.1-1" }, { name = "headlines.nvim", url = "lukas-reineke/headlines.nvim", @@ -318,7 +330,7 @@ return }, { name = "indent-blankline.nvim", url = "lukas-reineke/indent-blankline.nvim", - version = "3.7.2-1" + version = "3.8.2-1" }, { name = "kai.nvim", url = "Kamilcuk/kai.nvim", @@ -327,6 +339,10 @@ return name = "kanban.nvim", url = "Kibadda/kanban.nvim", version = "1.3.0-1" + }, { + name = "kube.nvim", + url = "mimparat132/kube.nvim", + version = "1.2.0-1" }, { name = "lazy.nvim", url = "folke/lazy.nvim", @@ -395,6 +411,10 @@ return name = "luarocks-build-treesitter-parser-cpp", url = "nvim-neorocks/luarocks-build-treesitter-parser-cpp", version = "2.0.4-1" + }, { + name = "magazine.nvim", + url = "iguanacucumber/magazine.nvim", + version = "0.1-1" }, { name = "mapx.nvim", url = "b0o/mapx.nvim", @@ -406,7 +426,7 @@ return }, { name = "markview.nvim", url = "OXY2DEV/markview.nvim", - version = "23.1.0-1" + version = "24.0.0-1" }, { name = "mason-lspconfig.nvim", url = "williamboman/mason-lspconfig.nvim", @@ -494,15 +514,15 @@ return }, { name = "neotest", url = "nvim-neotest/neotest", - version = "5.6.0-1" + version = "5.6.1-1" }, { name = "neotest-busted", url = "MisanthropicBit/neotest-busted", - version = "0.2.0-1" + version = "0.2.1-1" }, { name = "neotest-golang", url = "fredrikaverpil/neotest-golang", - version = "1.2.0-1" + version = "1.3.0-1" }, { name = "neotest-haskell", url = "mrcjkb/neotest-haskell", @@ -510,7 +530,7 @@ return }, { name = "neotest-java", url = "rcasia/neotest-java", - version = "0.16.0-1" + version = "0.17.4-1" }, { name = "netman.nvim", url = "miversen33/netman.nvim", @@ -522,11 +542,11 @@ return }, { name = "no-neck-pain.nvim", url = "shortcuts/no-neck-pain.nvim", - version = "2.0.5-1" + version = "2.0.6-1" }, { name = "noice.nvim", url = "folke/noice.nvim", - version = "4.5.1-1" + version = "4.5.2-1" }, { name = "npackages.nvim", url = "diegofigs/npackages.nvim", @@ -542,7 +562,7 @@ return }, { name = "nvim-a2-pack", url = "dfgordon/nvim-a2-pack", - version = "0.0.2-1" + version = "0.2.0-1" }, { name = "nvim-bqf", url = "kevinhwang91/nvim-bqf", @@ -634,7 +654,7 @@ return }, { name = "nvim-scrollview", url = "dstein64/nvim-scrollview", - version = "5.2.2-1" + version = "6.0.0-1" }, { name = "nvim-smuggler", url = "Klafyvel/nvim-smuggler", @@ -682,7 +702,7 @@ return }, { name = "onedarkpro.nvim", url = "olimorris/onedarkpro.nvim", - version = "1.0.0-1" + version = "2.0.0-1" }, { name = "onenord.nvim", url = "rmehri01/onenord.nvim", @@ -722,7 +742,7 @@ return }, { name = "persisted.nvim", url = "olimorris/persisted.nvim", - version = "2.0.0-1" + version = "2.0.1-1" }, { name = "persistence.nvim", url = "folke/persistence.nvim", @@ -762,11 +782,11 @@ return }, { name = "render-markdown.nvim", url = "MeanderingProgrammer/render-markdown.nvim", - version = "7.2.0-1" + version = "7.4.0-1" }, { name = "rest.nvim", url = "rest-nvim/rest.nvim", - version = "3.8.2-1" + version = "3.8.3-1" }, { name = "rime.nvim", url = "Freed-Wu/rime.nvim", @@ -782,11 +802,11 @@ return }, { name = "rocks-git.nvim", url = "nvim-neorocks/rocks-git.nvim", - version = "2.3.1-1" + version = "2.4.2-1" }, { name = "rocks-lazy.nvim", url = "nvim-neorocks/rocks-lazy.nvim", - version = "1.1.0-1" + version = "1.1.1-1" }, { name = "rocks-treesitter.nvim", url = "nvim-neorocks/rocks-treesitter.nvim", @@ -794,7 +814,7 @@ return }, { name = "rocks.nvim", url = "nvim-neorocks/rocks.nvim", - version = "2.40.2-1" + version = "2.40.5-1" }, { name = "rtp.nvim", url = "nvim-neorocks/rtp.nvim", @@ -806,7 +826,7 @@ return }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "5.11.0-1" + version = "5.13.0-1" }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", @@ -826,7 +846,7 @@ return }, { name = "sf.nvim", url = "xixiaofinland/sf.nvim", - version = "1.7.0-1" + version = "1.8.0-1" }, { name = "sg.nvim", url = "sourcegraph/sg.nvim", @@ -835,6 +855,10 @@ return name = "smart-splits.nvim", url = "mrjones2014/smart-splits.nvim", version = "1.6.0-1" + }, { + name = "sos.nvim", + url = "tmillr/sos.nvim", + version = "1.0.0-1" }, { name = "squirrel.nvim", url = "xiaoshihou514/squirrel.nvim", @@ -894,663 +918,667 @@ return }, { name = "tree-sitter-ada", url = "briot/tree-sitter-ada", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-agda", url = "tree-sitter/tree-sitter-agda", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-angular", url = "dlvandenberg/tree-sitter-angular", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-apex", url = "aheber/tree-sitter-sfapex", - version = "0.0.26-1" + version = "0.0.36-1" }, { name = "tree-sitter-arduino", url = "tree-sitter-grammars/tree-sitter-arduino", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-asm", url = "RubixDev/tree-sitter-asm", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-astro", url = "virchau13/tree-sitter-astro", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-authzed", url = "mleonidas/tree-sitter-authzed", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-awk", url = "Beaglefoot/tree-sitter-awk", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-bash", url = "tree-sitter/tree-sitter-bash", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-bass", url = "vito/tree-sitter-bass", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-beancount", url = "polarmutex/tree-sitter-beancount", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-bibtex", url = "latex-lsp/tree-sitter-bibtex", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-bicep", url = "tree-sitter-grammars/tree-sitter-bicep", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-bitbake", url = "tree-sitter-grammars/tree-sitter-bitbake", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-blueprint", url = "https://gitlab.com/gabmus/tree-sitter-blueprint/-/archive/60ba73739c6083c693d86a1a7cf039c07eb4ed59.zip", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-bp", url = "ambroisie/tree-sitter-bp", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-c", url = "tree-sitter/tree-sitter-c", - version = "0.0.25-1" + version = "0.0.32-1" }, { name = "tree-sitter-c_sharp", url = "tree-sitter/tree-sitter-c-sharp", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-cairo", url = "tree-sitter-grammars/tree-sitter-cairo", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-capnp", url = "tree-sitter-grammars/tree-sitter-capnp", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-chatito", url = "tree-sitter-grammars/tree-sitter-chatito", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-clojure", url = "sogaiu/tree-sitter-clojure", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-cmake", url = "uyha/tree-sitter-cmake", - version = "0.0.24-1" + version = "0.0.31-1" }, { name = "tree-sitter-comment", url = "stsewd/tree-sitter-comment", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-commonlisp", url = "tree-sitter-grammars/tree-sitter-commonlisp", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-cooklang", url = "addcninblue/tree-sitter-cooklang", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-corn", url = "jakestanger/tree-sitter-corn", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-cpon", url = "tree-sitter-grammars/tree-sitter-cpon", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-cpp", url = "tree-sitter/tree-sitter-cpp", - version = "0.0.26-1" + version = "0.0.32-1" }, { name = "tree-sitter-css", url = "tree-sitter/tree-sitter-css", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-csv", url = "tree-sitter-grammars/tree-sitter-csv", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-cuda", url = "tree-sitter-grammars/tree-sitter-cuda", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-cue", url = "eonpatapon/tree-sitter-cue", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-d", url = "gdamore/tree-sitter-d", - version = "0.0.28-1" + version = "0.0.33-1" }, { name = "tree-sitter-dart", url = "UserNobody14/tree-sitter-dart", - version = "0.0.24-1" + version = "0.0.32-1" }, { name = "tree-sitter-devicetree", url = "joelspadin/tree-sitter-devicetree", - version = "0.0.25-1" + version = "0.0.31-1" }, { name = "tree-sitter-dhall", url = "jbellerb/tree-sitter-dhall", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-diff", url = "the-mikedavis/tree-sitter-diff", - version = "0.0.24-1" + version = "0.0.31-1" }, { name = "tree-sitter-disassembly", url = "ColinKennedy/tree-sitter-disassembly", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-djot", url = "treeman/tree-sitter-djot", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-dockerfile", url = "camdencheek/tree-sitter-dockerfile", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-dot", url = "rydesun/tree-sitter-dot", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-doxygen", url = "tree-sitter-grammars/tree-sitter-doxygen", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-dtd", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-earthfile", url = "glehmann/tree-sitter-earthfile", - version = "0.0.26-1" + version = "0.0.31-1" }, { name = "tree-sitter-ebnf", url = "RubixDev/ebnf", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-ecma", url = "nvim-neorocks/luarocks-stub", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-editorconfig", url = "ValdezFOmar/tree-sitter-editorconfig", - version = "0.0.25-1" + version = "0.0.34-1" }, { name = "tree-sitter-eds", url = "uyha/tree-sitter-eds", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-eex", url = "connorlay/tree-sitter-eex", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-elixir", url = "elixir-lang/tree-sitter-elixir", - version = "0.0.26-1" + version = "0.0.33-1" }, { name = "tree-sitter-elm", url = "elm-tooling/tree-sitter-elm", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-elsa", url = "glapa-grossklag/tree-sitter-elsa", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-elvish", url = "elves/tree-sitter-elvish", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-embedded_template", url = "tree-sitter/tree-sitter-embedded-template", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-erlang", url = "WhatsApp/tree-sitter-erlang", - version = "0.0.24-1" + version = "0.0.31-1" }, { name = "tree-sitter-facility", url = "FacilityApi/tree-sitter-facility", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-faust", url = "khiner/tree-sitter-faust", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-fennel", url = "alexmozaidze/tree-sitter-fennel", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-fidl", url = "google/tree-sitter-fidl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-firrtl", url = "tree-sitter-grammars/tree-sitter-firrtl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-fish", url = "ram02z/tree-sitter-fish", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-foam", url = "FoamScience/tree-sitter-foam", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-forth", url = "AlexanderBrevig/tree-sitter-forth", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-fortran", url = "stadelmanma/tree-sitter-fortran", - version = "0.0.27-1" + version = "0.0.32-1" }, { name = "tree-sitter-fsh", url = "mgramigna/tree-sitter-fsh", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-fsharp", url = "ionide/tree-sitter-fsharp", - version = "0.0.2-1" + version = "0.0.9-1" }, { name = "tree-sitter-func", url = "tree-sitter-grammars/tree-sitter-func", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-fusion", url = "https://gitlab.com/jirgn/tree-sitter-fusion/-/archive/19db2f47ba4c3a0f6238d4ae0e2abfca16e61dd6.zip", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gap", url = "gap-system/tree-sitter-gap", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gaptst", url = "gap-system/tree-sitter-gaptst", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gdscript", url = "PrestonKnopp/tree-sitter-gdscript", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gdshader", url = "GodOfAvacyn/tree-sitter-gdshader", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-git_config", url = "the-mikedavis/tree-sitter-git-config", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-git_rebase", url = "the-mikedavis/tree-sitter-git-rebase", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gitattributes", url = "tree-sitter-grammars/tree-sitter-gitattributes", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gitcommit", url = "gbprod/tree-sitter-gitcommit", - version = "0.0.24-1" + version = "0.0.32-1" }, { name = "tree-sitter-gitignore", url = "shunsambongi/tree-sitter-gitignore", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gleam", url = "gleam-lang/tree-sitter-gleam", - version = "0.0.26-1" + version = "0.0.31-1" }, { name = "tree-sitter-glimmer", url = "ember-tooling/tree-sitter-glimmer", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-glimmer_javascript", url = "NullVoxPopuli/tree-sitter-glimmer-javascript", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-glimmer_typescript", url = "NullVoxPopuli/tree-sitter-glimmer-typescript", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-glsl", url = "tree-sitter-grammars/tree-sitter-glsl", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-gn", url = "tree-sitter-grammars/tree-sitter-gn", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gnuplot", url = "dpezto/tree-sitter-gnuplot", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-go", url = "tree-sitter/tree-sitter-go", - version = "0.0.25-1" + version = "0.0.31-1" }, { name = "tree-sitter-goctl", url = "chaozwn/tree-sitter-goctl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-godot_resource", url = "PrestonKnopp/tree-sitter-godot-resource", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gomod", url = "camdencheek/tree-sitter-go-mod", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-gosum", url = "tree-sitter-grammars/tree-sitter-go-sum", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gotmpl", url = "ngalaiko/tree-sitter-go-template", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-gowork", url = "omertuc/tree-sitter-go-work", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gpg", url = "tree-sitter-grammars/tree-sitter-gpg-config", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-graphql", url = "bkegley/tree-sitter-graphql", - version = "0.0.24-1" + version = "0.0.29-1" + }, { + name = "tree-sitter-gren", + url = "MaeBrooks/tree-sitter-gren", + version = "0.0.2-1" }, { name = "tree-sitter-groovy", url = "murtaza64/tree-sitter-groovy", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-gstlaunch", url = "tree-sitter-grammars/tree-sitter-gstlaunch", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-hack", url = "slackhq/tree-sitter-hack", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-hare", url = "tree-sitter-grammars/tree-sitter-hare", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-haskell", url = "tree-sitter/tree-sitter-haskell", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-haskell_persistent", url = "MercuryTechnologies/tree-sitter-haskell-persistent", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-hcl", url = "tree-sitter-grammars/tree-sitter-hcl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-heex", url = "connorlay/tree-sitter-heex", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-helm", url = "ngalaiko/tree-sitter-go-template", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-hjson", url = "winston0410/tree-sitter-hjson", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-hlsl", url = "tree-sitter-grammars/tree-sitter-hlsl", - version = "0.0.25-1" + version = "0.0.31-1" }, { name = "tree-sitter-hlsplaylist", url = "Freed-Wu/tree-sitter-hlsplaylist", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-hocon", url = "antosha417/tree-sitter-hocon", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-hoon", url = "urbit-pilled/tree-sitter-hoon", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-html", url = "tree-sitter/tree-sitter-html", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-html_tags", url = "nvim-neorocks/luarocks-stub", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-htmldjango", url = "interdependence/tree-sitter-htmldjango", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-http", url = "rest-nvim/tree-sitter-http", - version = "0.0.26-1" + version = "0.0.31-1" }, { name = "tree-sitter-hurl", url = "pfeiferj/tree-sitter-hurl", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-hyprlang", url = "tree-sitter-grammars/tree-sitter-hyprlang", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-idl", url = "cathaysia/tree-sitter-idl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-ini", url = "justinmk/tree-sitter-ini", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-inko", url = "inko-lang/tree-sitter-inko", - version = "0.0.26-1" + version = "0.0.31-1" }, { name = "tree-sitter-ispc", url = "tree-sitter-grammars/tree-sitter-ispc", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-janet_simple", url = "sogaiu/tree-sitter-janet-simple", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-java", url = "tree-sitter/tree-sitter-java", - version = "0.0.24-1" + version = "0.0.32-1" }, { name = "tree-sitter-javascript", url = "tree-sitter/tree-sitter-javascript", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-jq", url = "flurie/tree-sitter-jq", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-jsdoc", url = "tree-sitter/tree-sitter-jsdoc", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-json", url = "tree-sitter/tree-sitter-json", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-json5", url = "Joakker/tree-sitter-json5", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-jsonc", url = "https://gitlab.com/WhyNotHugo/tree-sitter-jsonc/-/archive/02b01653c8a1c198ae7287d566efa86a135b30d5.zip", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-jsonnet", url = "sourcegraph/tree-sitter-jsonnet", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-jsx", url = "nvim-neorocks/luarocks-stub", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-julia", url = "tree-sitter/tree-sitter-julia", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-just", url = "IndianBoy42/tree-sitter-just", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-kconfig", url = "tree-sitter-grammars/tree-sitter-kconfig", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-kdl", url = "tree-sitter-grammars/tree-sitter-kdl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-kotlin", url = "fwcd/tree-sitter-kotlin", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-koto", url = "koto-lang/tree-sitter-koto", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-kusto", url = "Willem-J-an/tree-sitter-kusto", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-lalrpop", url = "traxys/tree-sitter-lalrpop", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-latex", url = "latex-lsp/tree-sitter-latex", - version = "0.0.25-1" + version = "0.0.32-1" }, { name = "tree-sitter-ledger", url = "cbarrete/tree-sitter-ledger", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-leo", url = "r001/tree-sitter-leo", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-linkerscript", url = "tree-sitter-grammars/tree-sitter-linkerscript", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-liquid", url = "hankthetank27/tree-sitter-liquid", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-liquidsoap", url = "savonet/tree-sitter-liquidsoap", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-llvm", url = "benwilliamgraham/tree-sitter-llvm", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-lua", url = "tree-sitter-grammars/tree-sitter-lua", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-luadoc", url = "tree-sitter-grammars/tree-sitter-luadoc", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-luap", url = "tree-sitter-grammars/tree-sitter-luap", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-luau", url = "tree-sitter-grammars/tree-sitter-luau", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-m68k", url = "grahambates/tree-sitter-m68k", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-make", url = "alemuller/tree-sitter-make", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-markdown", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.28-1" + version = "0.0.34-1" }, { name = "tree-sitter-markdown_inline", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.28-1" + version = "0.0.34-1" }, { name = "tree-sitter-matlab", url = "acristoffers/tree-sitter-matlab", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-menhir", url = "Kerl13/tree-sitter-menhir", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-mermaid", url = "monaqa/tree-sitter-mermaid", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-meson", url = "tree-sitter-grammars/tree-sitter-meson", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-mlir", url = "artagnon/tree-sitter-mlir", - version = "0.0.24-1" + version = "0.0.34-1" }, { name = "tree-sitter-muttrc", url = "neomutt/tree-sitter-muttrc", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-nasm", url = "naclsn/tree-sitter-nasm", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-nginx", url = "opa-oz/tree-sitter-nginx", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-nickel", url = "nickel-lang/tree-sitter-nickel", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-nim", url = "alaviss/tree-sitter-nim", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-nim_format_string", url = "aMOPel/tree-sitter-nim-format-string", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-ninja", url = "alemuller/tree-sitter-ninja", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-nix", url = "cstrahan/tree-sitter-nix", - version = "0.0.29-1" + version = "0.0.42-1" }, { name = "tree-sitter-norg", url = "nvim-neorg/tree-sitter-norg", @@ -1562,31 +1590,31 @@ return }, { name = "tree-sitter-nqc", url = "tree-sitter-grammars/tree-sitter-nqc", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-objc", url = "tree-sitter-grammars/tree-sitter-objc", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-objdump", url = "ColinKennedy/tree-sitter-objdump", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-ocaml", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.27-1" + version = "0.0.32-1" }, { name = "tree-sitter-ocaml_interface", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.27-1" + version = "0.0.33-1" }, { name = "tree-sitter-ocamllex", url = "atom-ocaml/tree-sitter-ocamllex", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-odin", url = "tree-sitter-grammars/tree-sitter-odin", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-org", url = "milisims/tree-sitter-org", @@ -1598,507 +1626,527 @@ return }, { name = "tree-sitter-pascal", url = "Isopod/tree-sitter-pascal", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-passwd", url = "ath3/tree-sitter-passwd", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-pem", url = "tree-sitter-grammars/tree-sitter-pem", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-perl", url = "tree-sitter-perl/tree-sitter-perl", - version = "0.0.28-1" + version = "0.0.35-1" }, { name = "tree-sitter-php", url = "tree-sitter/tree-sitter-php", - version = "0.0.24-1" + version = "0.0.33-1" }, { name = "tree-sitter-php_only", url = "tree-sitter/tree-sitter-php", - version = "0.0.24-1" + version = "0.0.33-1" }, { name = "tree-sitter-phpdoc", url = "claytonrcarter/tree-sitter-phpdoc", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-pioasm", url = "leo60228/tree-sitter-pioasm", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-po", url = "tree-sitter-grammars/tree-sitter-po", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-pod", url = "tree-sitter-perl/tree-sitter-pod", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-poe_filter", url = "tree-sitter-grammars/tree-sitter-poe-filter", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-pony", url = "tree-sitter-grammars/tree-sitter-pony", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-powershell", url = "airbus-cert/tree-sitter-powershell", - version = "0.0.25-1" + version = "0.0.30-1" }, { name = "tree-sitter-printf", url = "tree-sitter-grammars/tree-sitter-printf", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-prisma", url = "victorhqc/tree-sitter-prisma", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-problog", url = "foxyseta/tree-sitter-prolog", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-prolog", url = "foxyseta/tree-sitter-prolog", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-promql", url = "MichaHoffmann/tree-sitter-promql", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-properties", url = "tree-sitter-grammars/tree-sitter-properties", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-proto", url = "treywood/tree-sitter-proto", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-prql", url = "PRQL/tree-sitter-prql", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-psv", url = "tree-sitter-grammars/tree-sitter-csv", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-pug", url = "zealot128/tree-sitter-pug", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-puppet", url = "tree-sitter-grammars/tree-sitter-puppet", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-purescript", url = "postsolar/tree-sitter-purescript", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-pymanifest", url = "tree-sitter-grammars/tree-sitter-pymanifest", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-python", url = "tree-sitter/tree-sitter-python", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-ql", url = "tree-sitter/tree-sitter-ql", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-qmldir", url = "tree-sitter-grammars/tree-sitter-qmldir", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-qmljs", url = "yuja/tree-sitter-qmljs", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-query", url = "tree-sitter-grammars/tree-sitter-query", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-r", url = "r-lib/tree-sitter-r", - version = "0.0.26-1" + version = "0.0.31-1" }, { name = "tree-sitter-racket", url = "6cdh/tree-sitter-racket", - version = "0.0.26-1" + version = "0.0.31-1" }, { name = "tree-sitter-ralph", url = "alephium/tree-sitter-ralph", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-rasi", url = "Fymyte/tree-sitter-rasi", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-rbs", url = "joker1007/tree-sitter-rbs", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-re2c", url = "tree-sitter-grammars/tree-sitter-re2c", - version = "0.0.25-1" + version = "0.0.31-1" }, { name = "tree-sitter-readline", url = "tree-sitter-grammars/tree-sitter-readline", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-regex", url = "tree-sitter/tree-sitter-regex", - version = "0.0.24-1" + version = "0.0.32-1" }, { name = "tree-sitter-rego", url = "FallenAngel97/tree-sitter-rego", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-requirements", url = "tree-sitter-grammars/tree-sitter-requirements", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-rescript", url = "rescript-lang/tree-sitter-rescript", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-rnoweb", url = "bamonroe/tree-sitter-rnoweb", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-robot", url = "Hubro/tree-sitter-robot", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-robots", url = "opa-oz/tree-sitter-robots-txt", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-roc", url = "faldor20/tree-sitter-roc", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-ron", url = "tree-sitter-grammars/tree-sitter-ron", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-rst", url = "stsewd/tree-sitter-rst", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-ruby", url = "tree-sitter/tree-sitter-ruby", - version = "0.0.24-1" + version = "0.0.31-1" }, { name = "tree-sitter-rust", url = "tree-sitter/tree-sitter-rust", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-scala", url = "tree-sitter/tree-sitter-scala", - version = "0.0.27-1" + version = "0.0.36-1" }, { name = "tree-sitter-scfg", url = "rockorager/tree-sitter-scfg", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-scheme", url = "6cdh/tree-sitter-scheme", - version = "0.0.26-1" + version = "0.0.31-1" }, { name = "tree-sitter-scss", url = "serenadeai/tree-sitter-scss", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-sflog", url = "aheber/tree-sitter-sfapex", - version = "0.0.26-1" + version = "0.0.34-1" }, { name = "tree-sitter-slang", url = "tree-sitter-grammars/tree-sitter-slang", - version = "0.0.25-1" + version = "0.0.32-1" }, { name = "tree-sitter-slint", url = "slint-ui/tree-sitter-slint", - version = "0.0.24-1" + version = "0.0.31-1" }, { name = "tree-sitter-smali", url = "tree-sitter-grammars/tree-sitter-smali", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-smithy", url = "indoorvivants/tree-sitter-smithy", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-snakemake", url = "osthomas/tree-sitter-snakemake", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-solidity", url = "JoranHonig/tree-sitter-solidity", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-soql", url = "aheber/tree-sitter-sfapex", - version = "0.0.26-1" + version = "0.0.35-1" }, { name = "tree-sitter-sosl", url = "aheber/tree-sitter-sfapex", - version = "0.0.26-1" + version = "0.0.34-1" }, { name = "tree-sitter-sourcepawn", url = "nilshelmig/tree-sitter-sourcepawn", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-sparql", url = "GordianDziwis/tree-sitter-sparql", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-sql", url = "derekstride/tree-sitter-sql", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-squirrel", url = "tree-sitter-grammars/tree-sitter-squirrel", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-ssh_config", url = "tree-sitter-grammars/tree-sitter-ssh-config", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-starlark", url = "tree-sitter-grammars/tree-sitter-starlark", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-strace", url = "sigmaSd/tree-sitter-strace", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-styled", url = "mskelton/tree-sitter-styled", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-supercollider", url = "madskjeldgaard/tree-sitter-supercollider", - version = "0.0.25-1" + version = "0.0.30-1" + }, { + name = "tree-sitter-superhtml", + url = "kristoff-it/superhtml", + version = "0.0.6-1" }, { name = "tree-sitter-surface", url = "connorlay/tree-sitter-surface", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-svelte", url = "tree-sitter-grammars/tree-sitter-svelte", - version = "0.0.26-1" + version = "0.0.32-1" }, { name = "tree-sitter-swift", url = "alex-pinkus/tree-sitter-swift", - version = "0.0.26-1" + version = "0.0.35-1" }, { name = "tree-sitter-sxhkdrc", url = "RaafatTurki/tree-sitter-sxhkdrc", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-systemtap", url = "ok-ryoko/tree-sitter-systemtap", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-systemverilog", url = "zhangwwpeng/tree-sitter-systemverilog", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-t32", - url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/6182836f4128725f1e74ce986840d7317021a015.zip", - version = "0.0.24-1" + url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/0f6a5b1e031c97ebf58d3c76eadb2c6bf1e4f780.zip", + version = "0.0.30-1" }, { name = "tree-sitter-tablegen", url = "tree-sitter-grammars/tree-sitter-tablegen", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-tact", url = "tact-lang/tree-sitter-tact", - version = "0.0.25-1" + version = "0.0.33-1" }, { name = "tree-sitter-tcl", url = "tree-sitter-grammars/tree-sitter-tcl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-teal", url = "euclidianAce/tree-sitter-teal", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-templ", url = "vrischmann/tree-sitter-templ", - version = "0.0.26-1" + version = "0.0.33-1" }, { name = "tree-sitter-terraform", url = "MichaHoffmann/tree-sitter-hcl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-textproto", url = "PorterAtGoogle/tree-sitter-textproto", - version = "0.0.24-1" + version = "0.0.31-1" }, { name = "tree-sitter-thrift", url = "tree-sitter-grammars/tree-sitter-thrift", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-tiger", url = "ambroisie/tree-sitter-tiger", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-tlaplus", url = "tlaplus-community/tree-sitter-tlaplus", - version = "0.0.26-1" + version = "0.0.34-1" }, { name = "tree-sitter-tmux", url = "Freed-Wu/tree-sitter-tmux", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-todotxt", url = "arnarg/tree-sitter-todotxt", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-toml", url = "tree-sitter-grammars/tree-sitter-toml", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-tsv", url = "tree-sitter-grammars/tree-sitter-csv", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-tsx", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-turtle", url = "GordianDziwis/tree-sitter-turtle", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-twig", url = "gbprod/tree-sitter-twig", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-typescript", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-typespec", url = "happenslol/tree-sitter-typespec", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-typoscript", url = "Teddytrombone/tree-sitter-typoscript", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-typst", url = "uben0/tree-sitter-typst", - version = "0.0.24-1" + version = "0.0.31-1" }, { name = "tree-sitter-udev", url = "tree-sitter-grammars/tree-sitter-udev", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-ungrammar", url = "tree-sitter-grammars/tree-sitter-ungrammar", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-unison", url = "kylegoetz/tree-sitter-unison", - version = "0.0.24-1" + version = "0.0.31-1" }, { name = "tree-sitter-usd", url = "ColinKennedy/tree-sitter-usd", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-uxntal", url = "tree-sitter-grammars/tree-sitter-uxntal", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-v", url = "vlang/v-analyzer", - version = "0.0.27-1" + version = "0.0.34-1" }, { name = "tree-sitter-vala", url = "vala-lang/tree-sitter-vala", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-vento", url = "ventojs/tree-sitter-vento", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-verilog", - url = "tree-sitter/tree-sitter-verilog", - version = "0.0.24-1" + url = "gmlarumbe/tree-sitter-systemverilog", + version = "0.0.33-1" }, { name = "tree-sitter-vhdl", url = "jpt13653903/tree-sitter-vhdl", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-vhs", url = "charmbracelet/tree-sitter-vhs", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-vim", url = "tree-sitter-grammars/tree-sitter-vim", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-vimdoc", url = "neovim/tree-sitter-vimdoc", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-vrl", url = "belltoy/tree-sitter-vrl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-vue", url = "tree-sitter-grammars/tree-sitter-vue", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-wgsl", url = "szebniok/tree-sitter-wgsl", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-wgsl_bevy", url = "tree-sitter-grammars/tree-sitter-wgsl-bevy", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-wing", url = "winglang/tree-sitter-wing", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-wit", url = "liamwh/tree-sitter-wit", - version = "0.0.24-1" + version = "0.0.30-1" }, { name = "tree-sitter-xcompose", url = "tree-sitter-grammars/tree-sitter-xcompose", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-xml", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.24-1" + version = "0.0.30-1" + }, { + name = "tree-sitter-xresources", + url = "ValdezFOmar/tree-sitter-xresources", + version = "0.0.3-1" }, { name = "tree-sitter-yaml", url = "tree-sitter-grammars/tree-sitter-yaml", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-yang", url = "Hubro/tree-sitter-yang", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-yuck", url = "tree-sitter-grammars/tree-sitter-yuck", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-zathurarc", url = "Freed-Wu/tree-sitter-zathurarc", - version = "0.0.24-1" + version = "0.0.29-1" }, { name = "tree-sitter-zig", url = "tree-sitter-grammars/tree-sitter-zig", - version = "0.0.25-1" + version = "0.0.30-1" + }, { + name = "tree-sitter-ziggy", + url = "kristoff-it/ziggy", + version = "0.0.6-1" + }, { + name = "tree-sitter-ziggy_schema", + url = "kristoff-it/ziggy", + version = "0.0.6-1" + }, { + name = "treedoc.nvim", + url = "neo451/treedoc.nvim", + version = "1.0.0-1" }, { name = "trouble.nvim", url = "folke/trouble.nvim", @@ -2142,7 +2190,7 @@ return }, { name = "yazi.nvim", url = "mikavilpas/yazi.nvim", - version = "6.3.0-1" + version = "6.4.3-1" }, { name = "zen-mode.nvim", url = "folke/zen-mode.nvim", From 408449a59adb8c2a31c32fff606676b32ce4552a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 4 Nov 2024 11:46:48 +0100 Subject: [PATCH 778/815] fix(rockspec): allow binary lua files. Fixes #1800 --- lua/lazy/pkg/rockspec.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lua/lazy/pkg/rockspec.lua b/lua/lazy/pkg/rockspec.lua index d7ecfdb..e8ece1b 100644 --- a/lua/lazy/pkg/rockspec.lua +++ b/lua/lazy/pkg/rockspec.lua @@ -224,9 +224,10 @@ end ---@return table? function M.parse(file) local ret = {} - return pcall(function() - loadfile(file, "t", ret)() + local ok = pcall(function() + loadfile(file, nil, ret)() end) and ret or nil + return ok and ret or nil end ---@param plugin LazyPlugin From b1134ab82ee4279e31f7ddf7e34b2a99eb9b7bc9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 4 Nov 2024 10:49:21 +0000 Subject: [PATCH 779/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 176 ++++++++++++++++++------------ 1 file changed, 108 insertions(+), 68 deletions(-) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index c105756..908d5d7 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -27,6 +27,10 @@ return name = "auto-hlsearch.nvim", url = "asiryk/auto-hlsearch.nvim", version = "1.1.0-1" + }, { + name = "autosave.nvim", + url = "brianhuster/autosave.nvim", + version = "0.1.1-1" }, { name = "banana.nvim", url = "CWood-sdf/banana.nvim", @@ -42,11 +46,11 @@ return }, { name = "better-escape.nvim", url = "max397574/better-escape.nvim", - version = "2.3.2-1" + version = "2.3.3-1" }, { name = "bufferline.nvim", url = "akinsho/bufferline.nvim", - version = "4.7.0-1" + version = "4.8.0-1" }, { name = "care.nvim", url = "max397574/care.nvim", @@ -79,6 +83,10 @@ return name = "colortils.nvim", url = "nvim-colortils/colortils.nvim", version = "1.1.0-1" + }, { + name = "command.nvim", + url = "cultab/command.nvim", + version = "0.1.1-1" }, { name = "commander.nvim", url = "FeiyouG/commander.nvim", @@ -114,11 +122,11 @@ return }, { name = "deadcolumn.nvim", url = "Bekaboo/deadcolumn.nvim", - version = "1.0.0-1" + version = "1.0.1-1" }, { name = "decasify.nvim", url = "alerque/decasify", - version = "0.7.3-1" + version = "0.8.0-1" }, { name = "decipher.nvim", url = "MisanthropicBit/decipher.nvim", @@ -154,7 +162,7 @@ return }, { name = "dropbar.nvim", url = "Bekaboo/dropbar.nvim", - version = "8.6.1-1" + version = "9.0.0-1" }, { name = "duck.nvim", url = "tamton-aquib/duck.nvim", @@ -178,7 +186,7 @@ return }, { name = "feed.nvim", url = "neo451/feed.nvim", - version = "1.5.1-1" + version = "1.6.3-1" }, { name = "feline.nvim", url = "freddiehaddad/feline.nvim", @@ -238,7 +246,7 @@ return }, { name = "git.nvim", url = "Kibadda/git.nvim", - version = "5.0.1-1" + version = "5.1.0-1" }, { name = "github-nvim-theme", url = "projekt0n/github-nvim-theme", @@ -274,7 +282,7 @@ return }, { name = "guard.nvim", url = "nvimdev/guard.nvim", - version = "1.0.1-1" + version = "1.0.3-1" }, { name = "hardhat.nvim", url = "TheSnakeWitcher/hardhat.nvim", @@ -314,7 +322,7 @@ return }, { name = "hurl.nvim", url = "jellydn/hurl.nvim", - version = "1.7.1-1" + version = "1.8.0-1" }, { name = "hydra.nvim", url = "nvimtools/hydra.nvim", @@ -330,7 +338,7 @@ return }, { name = "indent-blankline.nvim", url = "lukas-reineke/indent-blankline.nvim", - version = "3.8.2-1" + version = "3.8.3-1" }, { name = "kai.nvim", url = "Kamilcuk/kai.nvim", @@ -354,7 +362,7 @@ return }, { name = "lean.nvim", url = "Julian/lean.nvim", - version = "2024.9.2-1" + version = "2024.10.1-1" }, { name = "leetcode.nvim", url = "kawre/leetcode.nvim", @@ -367,6 +375,10 @@ return name = "live-command.nvim", url = "smjonas/live-command.nvim", version = "2.2.0-1" + }, { + name = "live-preview.nvim", + url = "brianhuster/live-preview.nvim", + version = "0.8.1-1" }, { name = "logging.nvim", url = "NTBBloodbath/logging.nvim", @@ -411,10 +423,18 @@ return name = "luarocks-build-treesitter-parser-cpp", url = "nvim-neorocks/luarocks-build-treesitter-parser-cpp", version = "2.0.4-1" + }, { + name = "mag-nvim-lsp", + url = "iguanacucumber/mag-nvim-lsp", + version = "0.1-1" + }, { + name = "mag-nvim-lua", + url = "iguanacucumber/mag-nvim-lua", + version = "0.1-1" }, { name = "magazine.nvim", url = "iguanacucumber/magazine.nvim", - version = "0.1-1" + version = "0.2.1-1" }, { name = "mapx.nvim", url = "b0o/mapx.nvim", @@ -522,7 +542,7 @@ return }, { name = "neotest-golang", url = "fredrikaverpil/neotest-golang", - version = "1.3.0-1" + version = "1.5.0-1" }, { name = "neotest-haskell", url = "mrcjkb/neotest-haskell", @@ -530,7 +550,11 @@ return }, { name = "neotest-java", url = "rcasia/neotest-java", - version = "0.17.4-1" + version = "0.17.5-1" + }, { + name = "neotest-zig", + url = "lawrence-laz/neotest-zig", + version = "1.3.0-1" }, { name = "netman.nvim", url = "miversen33/netman.nvim", @@ -546,7 +570,7 @@ return }, { name = "noice.nvim", url = "folke/noice.nvim", - version = "4.5.2-1" + version = "4.6.0-1" }, { name = "npackages.nvim", url = "diegofigs/npackages.nvim", @@ -563,6 +587,10 @@ return name = "nvim-a2-pack", url = "dfgordon/nvim-a2-pack", version = "0.2.0-1" + }, { + name = "nvim-best-practices-plugin-template", + url = "ColinKennedy/nvim-best-practices-plugin-template", + version = "1.3.1-1" }, { name = "nvim-bqf", url = "kevinhwang91/nvim-bqf", @@ -650,7 +678,7 @@ return }, { name = "nvim-possession", url = "gennaro-tedesco/nvim-possession", - version = "0.0.14-1" + version = "0.0.15-1" }, { name = "nvim-scrollview", url = "dstein64/nvim-scrollview", @@ -702,7 +730,7 @@ return }, { name = "onedarkpro.nvim", url = "olimorris/onedarkpro.nvim", - version = "2.0.0-1" + version = "2.0.1-1" }, { name = "onenord.nvim", url = "rmehri01/onenord.nvim", @@ -762,7 +790,7 @@ return }, { name = "quarry.nvim", url = "rudionrails/quarry.nvim", - version = "3.0.1-1" + version = "4.0.0-1" }, { name = "quicker.nvim", url = "stevearc/quicker.nvim", @@ -770,7 +798,7 @@ return }, { name = "rainbow-delimiters.nvim", url = "HiPhish/rainbow-delimiters.nvim", - version = "0.6.2-1" + version = "0.7.0-1" }, { name = "remember.nvim", url = "vladdoster/remember.nvim", @@ -802,7 +830,7 @@ return }, { name = "rocks-git.nvim", url = "nvim-neorocks/rocks-git.nvim", - version = "2.4.2-1" + version = "2.5.1-1" }, { name = "rocks-lazy.nvim", url = "nvim-neorocks/rocks-lazy.nvim", @@ -814,7 +842,7 @@ return }, { name = "rocks.nvim", url = "nvim-neorocks/rocks.nvim", - version = "2.40.5-1" + version = "2.41.1-1" }, { name = "rtp.nvim", url = "nvim-neorocks/rtp.nvim", @@ -822,11 +850,11 @@ return }, { name = "runt.nvim", url = "Julian/runt.nvim", - version = "2024.10.1-1" + version = "2024.10.2-1" }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "5.13.0-1" + version = "5.13.1-1" }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", @@ -855,6 +883,10 @@ return name = "smart-splits.nvim", url = "mrjones2014/smart-splits.nvim", version = "1.6.0-1" + }, { + name = "snippets.nvim", + url = "Kibadda/snippets.nvim", + version = "1.0.0-1" }, { name = "sos.nvim", url = "tmillr/sos.nvim", @@ -914,7 +946,7 @@ return }, { name = "tokyonight.nvim", url = "folke/tokyonight.nvim", - version = "4.8.0-1" + version = "4.9.0-1" }, { name = "tree-sitter-ada", url = "briot/tree-sitter-ada", @@ -950,11 +982,11 @@ return }, { name = "tree-sitter-awk", url = "Beaglefoot/tree-sitter-awk", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-bash", url = "tree-sitter/tree-sitter-bash", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-bass", url = "vito/tree-sitter-bass", @@ -962,7 +994,7 @@ return }, { name = "tree-sitter-beancount", url = "polarmutex/tree-sitter-beancount", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-bibtex", url = "latex-lsp/tree-sitter-bibtex", @@ -986,7 +1018,7 @@ return }, { name = "tree-sitter-c", url = "tree-sitter/tree-sitter-c", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-c_sharp", url = "tree-sitter/tree-sitter-c-sharp", @@ -1051,6 +1083,10 @@ return name = "tree-sitter-cue", url = "eonpatapon/tree-sitter-cue", version = "0.0.29-1" + }, { + name = "tree-sitter-cylc", + url = "elliotfontaine/tree-sitter-cylc", + version = "0.0.1-1" }, { name = "tree-sitter-d", url = "gdamore/tree-sitter-d", @@ -1059,6 +1095,10 @@ return name = "tree-sitter-dart", url = "UserNobody14/tree-sitter-dart", version = "0.0.32-1" + }, { + name = "tree-sitter-desktop", + url = "ValdezFOmar/tree-sitter-desktop", + version = "0.0.4-1" }, { name = "tree-sitter-devicetree", url = "joelspadin/tree-sitter-devicetree", @@ -1094,7 +1134,7 @@ return }, { name = "tree-sitter-dtd", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-earthfile", url = "glehmann/tree-sitter-earthfile", @@ -1110,7 +1150,7 @@ return }, { name = "tree-sitter-editorconfig", url = "ValdezFOmar/tree-sitter-editorconfig", - version = "0.0.34-1" + version = "0.0.37-1" }, { name = "tree-sitter-eds", url = "uyha/tree-sitter-eds", @@ -1122,7 +1162,7 @@ return }, { name = "tree-sitter-elixir", url = "elixir-lang/tree-sitter-elixir", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-elm", url = "elm-tooling/tree-sitter-elm", @@ -1142,7 +1182,7 @@ return }, { name = "tree-sitter-erlang", url = "WhatsApp/tree-sitter-erlang", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-facility", url = "FacilityApi/tree-sitter-facility", @@ -1178,7 +1218,7 @@ return }, { name = "tree-sitter-fortran", url = "stadelmanma/tree-sitter-fortran", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-fsh", url = "mgramigna/tree-sitter-fsh", @@ -1206,7 +1246,7 @@ return }, { name = "tree-sitter-gdscript", url = "PrestonKnopp/tree-sitter-gdscript", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-gdshader", url = "GodOfAvacyn/tree-sitter-gdshader", @@ -1226,7 +1266,7 @@ return }, { name = "tree-sitter-gitcommit", url = "gbprod/tree-sitter-gitcommit", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-gitignore", url = "shunsambongi/tree-sitter-gitignore", @@ -1234,7 +1274,7 @@ return }, { name = "tree-sitter-gleam", url = "gleam-lang/tree-sitter-gleam", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-glimmer", url = "ember-tooling/tree-sitter-glimmer", @@ -1302,7 +1342,7 @@ return }, { name = "tree-sitter-groovy", url = "murtaza64/tree-sitter-groovy", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-gstlaunch", url = "tree-sitter-grammars/tree-sitter-gstlaunch", @@ -1330,11 +1370,11 @@ return }, { name = "tree-sitter-heex", url = "connorlay/tree-sitter-heex", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-helm", url = "ngalaiko/tree-sitter-go-template", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-hjson", url = "winston0410/tree-sitter-hjson", @@ -1394,7 +1434,7 @@ return }, { name = "tree-sitter-ispc", url = "tree-sitter-grammars/tree-sitter-ispc", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-janet_simple", url = "sogaiu/tree-sitter-janet-simple", @@ -1406,7 +1446,7 @@ return }, { name = "tree-sitter-javascript", url = "tree-sitter/tree-sitter-javascript", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-jq", url = "flurie/tree-sitter-jq", @@ -1442,7 +1482,7 @@ return }, { name = "tree-sitter-just", url = "IndianBoy42/tree-sitter-just", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-kconfig", url = "tree-sitter-grammars/tree-sitter-kconfig", @@ -1458,7 +1498,7 @@ return }, { name = "tree-sitter-koto", url = "koto-lang/tree-sitter-koto", - version = "0.0.30-1" + version = "0.0.33-1" }, { name = "tree-sitter-kusto", url = "Willem-J-an/tree-sitter-kusto", @@ -1498,7 +1538,7 @@ return }, { name = "tree-sitter-lua", url = "tree-sitter-grammars/tree-sitter-lua", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-luadoc", url = "tree-sitter-grammars/tree-sitter-luadoc", @@ -1522,11 +1562,11 @@ return }, { name = "tree-sitter-markdown", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-markdown_inline", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-matlab", url = "acristoffers/tree-sitter-matlab", @@ -1546,7 +1586,7 @@ return }, { name = "tree-sitter-mlir", url = "artagnon/tree-sitter-mlir", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-muttrc", url = "neomutt/tree-sitter-muttrc", @@ -1578,7 +1618,7 @@ return }, { name = "tree-sitter-nix", url = "cstrahan/tree-sitter-nix", - version = "0.0.42-1" + version = "0.0.45-1" }, { name = "tree-sitter-norg", url = "nvim-neorg/tree-sitter-norg", @@ -1674,7 +1714,7 @@ return }, { name = "tree-sitter-powershell", url = "airbus-cert/tree-sitter-powershell", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-printf", url = "tree-sitter-grammars/tree-sitter-printf", @@ -1778,7 +1818,7 @@ return }, { name = "tree-sitter-regex", url = "tree-sitter/tree-sitter-regex", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-rego", url = "FallenAngel97/tree-sitter-rego", @@ -1814,15 +1854,15 @@ return }, { name = "tree-sitter-rst", url = "stsewd/tree-sitter-rst", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-ruby", url = "tree-sitter/tree-sitter-ruby", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-rust", url = "tree-sitter/tree-sitter-rust", - version = "0.0.30-1" + version = "0.0.33-1" }, { name = "tree-sitter-scala", url = "tree-sitter/tree-sitter-scala", @@ -1886,7 +1926,7 @@ return }, { name = "tree-sitter-sql", url = "derekstride/tree-sitter-sql", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-squirrel", url = "tree-sitter-grammars/tree-sitter-squirrel", @@ -1906,7 +1946,7 @@ return }, { name = "tree-sitter-styled", url = "mskelton/tree-sitter-styled", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-supercollider", url = "madskjeldgaard/tree-sitter-supercollider", @@ -1914,7 +1954,7 @@ return }, { name = "tree-sitter-superhtml", url = "kristoff-it/superhtml", - version = "0.0.6-1" + version = "0.0.9-1" }, { name = "tree-sitter-surface", url = "connorlay/tree-sitter-surface", @@ -1926,7 +1966,7 @@ return }, { name = "tree-sitter-swift", url = "alex-pinkus/tree-sitter-swift", - version = "0.0.35-1" + version = "0.0.36-1" }, { name = "tree-sitter-sxhkdrc", url = "RaafatTurki/tree-sitter-sxhkdrc", @@ -1941,8 +1981,8 @@ return version = "0.0.29-1" }, { name = "tree-sitter-t32", - url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/0f6a5b1e031c97ebf58d3c76eadb2c6bf1e4f780.zip", - version = "0.0.30-1" + url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/e455373021812abf4a0b5170caa0d882a9578bab.zip", + version = "0.0.31-1" }, { name = "tree-sitter-tablegen", url = "tree-sitter-grammars/tree-sitter-tablegen", @@ -1962,7 +2002,7 @@ return }, { name = "tree-sitter-templ", url = "vrischmann/tree-sitter-templ", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-terraform", url = "MichaHoffmann/tree-sitter-hcl", @@ -1974,7 +2014,7 @@ return }, { name = "tree-sitter-thrift", url = "tree-sitter-grammars/tree-sitter-thrift", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-tiger", url = "ambroisie/tree-sitter-tiger", @@ -1982,7 +2022,7 @@ return }, { name = "tree-sitter-tlaplus", url = "tlaplus-community/tree-sitter-tlaplus", - version = "0.0.34-1" + version = "0.0.36-1" }, { name = "tree-sitter-tmux", url = "Freed-Wu/tree-sitter-tmux", @@ -2054,7 +2094,7 @@ return }, { name = "tree-sitter-vala", url = "vala-lang/tree-sitter-vala", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-vento", url = "ventojs/tree-sitter-vento", @@ -2066,7 +2106,7 @@ return }, { name = "tree-sitter-vhdl", url = "jpt13653903/tree-sitter-vhdl", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-vhs", url = "charmbracelet/tree-sitter-vhs", @@ -2078,7 +2118,7 @@ return }, { name = "tree-sitter-vimdoc", url = "neovim/tree-sitter-vimdoc", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-vrl", url = "belltoy/tree-sitter-vrl", @@ -2110,11 +2150,11 @@ return }, { name = "tree-sitter-xml", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-xresources", url = "ValdezFOmar/tree-sitter-xresources", - version = "0.0.3-1" + version = "0.0.4-1" }, { name = "tree-sitter-yaml", url = "tree-sitter-grammars/tree-sitter-yaml", @@ -2146,7 +2186,7 @@ return }, { name = "treedoc.nvim", url = "neo451/treedoc.nvim", - version = "1.0.0-1" + version = "1.0.1-1" }, { name = "trouble.nvim", url = "folke/trouble.nvim", From 60cf258a9ae7fffe04bb31141141a91845158dcc Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sun, 10 Nov 2024 07:28:51 +0100 Subject: [PATCH 780/815] fix(docs): always update helptags for local plugins --- lua/lazy/manage/task/plugin.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index 69a93a5..c8a2bdb 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -87,7 +87,7 @@ M.build = { M.docs = { skip = function(plugin) - return not plugin._.dirty + return not plugin._.is_local and not plugin._.dirty end, run = function(self) local docs = self.plugin.dir .. "/doc" From 7967abe55752aa90532e6bb4bd4663fe27a264cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 11:07:59 +0100 Subject: [PATCH 781/815] chore(main): release 11.14.2 (#1730) :robot: I have created a release *beep* *boop* --- ## [11.14.2](https://github.com/folke/lazy.nvim/compare/v11.14.1...v11.14.2) (2024-11-10) ### Bug Fixes * **bootstrap:** single forward slash. Fixes [#1747](https://github.com/folke/lazy.nvim/issues/1747) ([aca30f6](https://github.com/folke/lazy.nvim/commit/aca30f63619a7492ecdea8833a065cf83c80f764)) * **completion:** check if command string is a prefix of Lazy ([#1760](https://github.com/folke/lazy.nvim/issues/1760)) ([e9fd76e](https://github.com/folke/lazy.nvim/commit/e9fd76e239cc18da289f9a3f80f35fa16b003175)), closes [#1758](https://github.com/folke/lazy.nvim/issues/1758) * **docs:** always update helptags for local plugins ([60cf258](https://github.com/folke/lazy.nvim/commit/60cf258a9ae7fffe04bb31141141a91845158dcc)) * **luarocks:** try to install from root manifest ([#1687](https://github.com/folke/lazy.nvim/issues/1687)) ([591ef40](https://github.com/folke/lazy.nvim/commit/591ef40f2da3a26fbcc0466988cd6fe45ca68cae)) * **rocks:** add lib64 plugin directory to package.cpath ([#1717](https://github.com/folke/lazy.nvim/issues/1717)) ([80da254](https://github.com/folke/lazy.nvim/commit/80da254e645f579c28394ee0f08f75a9c9481744)) * **rockspec:** allow binary lua files. Fixes [#1800](https://github.com/folke/lazy.nvim/issues/1800) ([408449a](https://github.com/folke/lazy.nvim/commit/408449a59adb8c2a31c32fff606676b32ce4552a)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 12 ++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index fe56f44..87f2b31 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.14.1" + ".": "11.14.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 83a3375..f76a332 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [11.14.2](https://github.com/folke/lazy.nvim/compare/v11.14.1...v11.14.2) (2024-11-10) + + +### Bug Fixes + +* **bootstrap:** single forward slash. Fixes [#1747](https://github.com/folke/lazy.nvim/issues/1747) ([aca30f6](https://github.com/folke/lazy.nvim/commit/aca30f63619a7492ecdea8833a065cf83c80f764)) +* **completion:** check if command string is a prefix of Lazy ([#1760](https://github.com/folke/lazy.nvim/issues/1760)) ([e9fd76e](https://github.com/folke/lazy.nvim/commit/e9fd76e239cc18da289f9a3f80f35fa16b003175)), closes [#1758](https://github.com/folke/lazy.nvim/issues/1758) +* **docs:** always update helptags for local plugins ([60cf258](https://github.com/folke/lazy.nvim/commit/60cf258a9ae7fffe04bb31141141a91845158dcc)) +* **luarocks:** try to install from root manifest ([#1687](https://github.com/folke/lazy.nvim/issues/1687)) ([591ef40](https://github.com/folke/lazy.nvim/commit/591ef40f2da3a26fbcc0466988cd6fe45ca68cae)) +* **rocks:** add lib64 plugin directory to package.cpath ([#1717](https://github.com/folke/lazy.nvim/issues/1717)) ([80da254](https://github.com/folke/lazy.nvim/commit/80da254e645f579c28394ee0f08f75a9c9481744)) +* **rockspec:** allow binary lua files. Fixes [#1800](https://github.com/folke/lazy.nvim/issues/1800) ([408449a](https://github.com/folke/lazy.nvim/commit/408449a59adb8c2a31c32fff606676b32ce4552a)) + ## [11.14.1](https://github.com/folke/lazy.nvim/compare/v11.14.0...v11.14.1) (2024-07-25) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 5bb1d91..8f56d52 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -241,7 +241,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.14.1" -- x-release-please-version +M.version = "11.14.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From e41dffcbafd7123c9c0ffb0bb1624b8e3d08c884 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 20 Nov 2024 09:08:44 +0100 Subject: [PATCH 782/815] docs: fix hl_group docgen --- lua/lazy/docs.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/docs.lua b/lua/lazy/docs.lua index 36880a1..7791b62 100644 --- a/lua/lazy/docs.lua +++ b/lua/lazy/docs.lua @@ -131,6 +131,7 @@ function M.colors(opts) { "---", "---", "---" }, } Util.foreach(require(opts.modname).colors, function(group, link) + link = type(link) == "table" and vim.inspect(link) or link lines[#lines + 1] = { "**" .. opts.name .. group .. "**", "***" .. link .. "***", comments[group] or "" } end) return { content = M.table(lines) } From 25749704e442b5c8e2db49a6fe11260760c73d5f Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 20 Nov 2024 09:11:45 +0100 Subject: [PATCH 783/815] docs: docgen --- lua/lazy/docs.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/docs.lua b/lua/lazy/docs.lua index 7791b62..b3b4d09 100644 --- a/lua/lazy/docs.lua +++ b/lua/lazy/docs.lua @@ -131,7 +131,7 @@ function M.colors(opts) { "---", "---", "---" }, } Util.foreach(require(opts.modname).colors, function(group, link) - link = type(link) == "table" and vim.inspect(link) or link + link = type(link) == "table" and vim.inspect(link):gsub("%s+", " ") or link lines[#lines + 1] = { "**" .. opts.name .. group .. "**", "***" .. link .. "***", comments[group] or "" } end) return { content = M.table(lines) } From 8e11d208d63de693127761cd9a5621117bf6c625 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 20 Nov 2024 08:13:59 +0000 Subject: [PATCH 784/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 61 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index c2c9695..7722a40 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -646,24 +646,42 @@ will be added to the plugin’s spec. -- then set the below to false. This should work, but is NOT supported and will -- increase downloads a lot. filter = true, + -- rate of network related git operations (clone, fetch, checkout) + throttle = { + enabled = false, -- not enabled by default + -- max 2 ops every 5 seconds + rate = 2, + duration = 5 * 1000, -- in ms + }, + -- Time in seconds to wait before running fetch again for a plugin. + -- Repeated update/check operations will not run again until this + -- cooldown period has passed. + cooldown = 0, }, pkg = { enabled = true, cache = vim.fn.stdpath("state") .. "/lazy/pkg-cache.lua", - versions = true, -- Honor versions in pkg sources -- the first package source that is found for a plugin will be used. sources = { "lazy", - "rockspec", + "rockspec", -- will only be used when rocks.enabled is true "packspec", }, }, rocks = { + enabled = true, root = vim.fn.stdpath("data") .. "/lazy-rocks", server = "https://nvim-neorocks.github.io/rocks-binaries/", + -- use hererocks to install luarocks? + -- set to `nil` to use hererocks when luarocks is not found + -- set to `true` to always use hererocks + -- set to `false` to always use luarocks + hererocks = nil, }, dev = { - ---@type string | fun(plugin: LazyPlugin): string directory where you store your local plugin projects + -- Directory where you store your local plugin projects. If a function is used, + -- the plugin directory (e.g. `~/projects/plugin-name`) must be returned. + ---@type string | fun(plugin: LazyPlugin): string path = "~/projects", ---@type string[] plugins that match these patterns will use your local versions instead of being fetched from GitHub patterns = {}, -- For example {"folke"} @@ -715,7 +733,7 @@ will be added to the plugin’s spec. -- leave nil, to automatically select a browser depending on your OS. -- If you want to use a specific browser, you can define it here browser = nil, ---@type string? - throttle = 20, -- how frequently should the ui process render events + throttle = 1000 / 30, -- how frequently should the ui process render events custom_keys = { -- You can define custom key maps here. If present, the description will -- be shown in the help menu. @@ -730,6 +748,16 @@ will be added to the plugin’s spec. desc = "Open lazygit log", }, + ["i"] = { + function(plugin) + Util.notify(vim.inspect(plugin), { + title = "Inspect " .. plugin.name, + lang = "lua", + }) + end, + desc = "Inspect Plugin", + }, + ["t"] = { function(plugin) require("lazy.util").float_term(nil, { @@ -740,6 +768,17 @@ will be added to the plugin’s spec. }, }, }, + -- Output options for headless mode + headless = { + -- show the output from process commands like git + process = true, + -- show log messages + log = true, + -- show task start/end + task = true, + -- use ansi colors + colors = true, + }, diff = { -- diff command can be one of: -- * browser: opens the github compare view. Note that this is always mapped to as well, @@ -791,7 +830,7 @@ will be added to the plugin’s spec. enabled = true, root = vim.fn.stdpath("state") .. "/lazy/readme", files = { "README.md", "lua/**/README.md" }, - -- only generate markdown helptags for plugins that dont have docs + -- only generate markdown helptags for plugins that don't have docs skip_if_doc_exists = true, }, state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things @@ -837,6 +876,8 @@ If you don’t want to use a Nerd Font, you can replace the icons with Unicode s ----------------------------------------------------------------------- Highlight Group Default Group Description ----------------------- ----------------------- ----------------------- + LazyBold { bold = true } + LazyButton CursorLine LazyButtonActive Visual @@ -857,10 +898,16 @@ If you don’t want to use a Nerd Font, you can replace the icons with Unicode s LazyDir @markup.link directory + LazyError DiagnosticError task errors + LazyH1 IncSearch home button LazyH2 Bold titles + LazyInfo DiagnosticInfo task errors + + LazyItalic { italic = true } + LazyLocal Constant LazyNoCond DiagnosticWarn unloaded icon for a @@ -897,13 +944,13 @@ If you don’t want to use a Nerd Font, you can replace the icons with Unicode s LazySpecial @punctuation.special - LazyTaskError ErrorMsg task errors - LazyTaskOutput MsgArea task output LazyUrl @markup.link url LazyValue @string value of a property + + LazyWarning DiagnosticWarn task errors ----------------------------------------------------------------------- ============================================================================== From 7d0fe7615a600e72c920dd0099181ae64c96ddb0 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Wed, 20 Nov 2024 09:24:25 +0100 Subject: [PATCH 785/815] ci: docgen fixes --- lua/lazy/docs.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/lazy/docs.lua b/lua/lazy/docs.lua index b3b4d09..afee2d4 100644 --- a/lua/lazy/docs.lua +++ b/lua/lazy/docs.lua @@ -131,8 +131,8 @@ function M.colors(opts) { "---", "---", "---" }, } Util.foreach(require(opts.modname).colors, function(group, link) - link = type(link) == "table" and vim.inspect(link):gsub("%s+", " ") or link - lines[#lines + 1] = { "**" .. opts.name .. group .. "**", "***" .. link .. "***", comments[group] or "" } + link = type(link) == "table" and "`" .. vim.inspect(link):gsub("%s+", " ") .. "`" or "***" .. link .. "***" + lines[#lines + 1] = { "**" .. opts.name .. group .. "**", link, comments[group] or "" } end) return { content = M.table(lines) } end From 56ead98e05bb37a4ec28930a54d836d033cf00f2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 20 Nov 2024 08:28:09 +0000 Subject: [PATCH 786/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 256 +++++++++++++++++------------- 1 file changed, 148 insertions(+), 108 deletions(-) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index 908d5d7..5c2bed1 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -10,11 +10,15 @@ return }, { name = "adopure.nvim", url = "Willem-J-an/adopure.nvim", - version = "1.1.2-1" + version = "1.2.0-1" }, { name = "aerial.nvim", url = "stevearc/aerial.nvim", version = "2.3.1-1" + }, { + name = "age.nvim", + url = "KingMichaelPark/age.nvim", + version = "0.1.0-1" }, { name = "ai.nvim", url = "S1M0N38/ai.nvim", @@ -30,7 +34,7 @@ return }, { name = "autosave.nvim", url = "brianhuster/autosave.nvim", - version = "0.1.1-1" + version = "0.4.1-1" }, { name = "banana.nvim", url = "CWood-sdf/banana.nvim", @@ -106,7 +110,11 @@ return }, { name = "conform.nvim", url = "stevearc/conform.nvim", - version = "8.1.0-1" + version = "8.2.0-1" + }, { + name = "cursor-text-objects.nvim", + url = "ColinKennedy/cursor-text-objects.nvim", + version = "1.1.0-1" }, { name = "cybu.nvim", url = "ghillb/cybu.nvim", @@ -154,15 +162,15 @@ return }, { name = "doris.nvim", url = "jackokring/doris.nvim", - version = "0.0.0-1" + version = "0.2.0-1" }, { name = "dressing.nvim", url = "stevearc/dressing.nvim", - version = "3.0.0-1" + version = "3.1.0-1" }, { name = "dropbar.nvim", url = "Bekaboo/dropbar.nvim", - version = "9.0.0-1" + version = "9.0.1-1" }, { name = "duck.nvim", url = "tamton-aquib/duck.nvim", @@ -178,19 +186,23 @@ return }, { name = "efmls-configs-nvim", url = "creativenull/efmls-configs-nvim", - version = "1.7.0-1" + version = "1.8.0-1" }, { name = "elixir-tools.nvim", url = "elixir-tools/elixir-tools.nvim", version = "0.16.1-1" + }, { + name = "fake.nvim", + url = "Kibadda/fake.nvim", + version = "1.0.0-1" }, { name = "feed.nvim", url = "neo451/feed.nvim", - version = "1.6.3-1" + version = "1.9.1-1" }, { name = "feline.nvim", url = "freddiehaddad/feline.nvim", - version = "1.6.3-1" + version = "1.7.0-1" }, { name = "fidget.nvim", url = "j-hui/fidget.nvim", @@ -302,7 +314,7 @@ return }, { name = "heirline.nvim", url = "rebelot/heirline.nvim", - version = "1.0.6-1" + version = "1.0.7-1" }, { name = "helpview.nvim", url = "OXY2DEV/helpview.nvim", @@ -322,7 +334,7 @@ return }, { name = "hurl.nvim", url = "jellydn/hurl.nvim", - version = "1.8.0-1" + version = "2.0.0-1" }, { name = "hydra.nvim", url = "nvimtools/hydra.nvim", @@ -338,7 +350,7 @@ return }, { name = "indent-blankline.nvim", url = "lukas-reineke/indent-blankline.nvim", - version = "3.8.3-1" + version = "3.8.5-1" }, { name = "kai.nvim", url = "Kamilcuk/kai.nvim", @@ -354,7 +366,7 @@ return }, { name = "lazy.nvim", url = "folke/lazy.nvim", - version = "11.14.1-1" + version = "11.14.2-1" }, { name = "lazydev.nvim", url = "folke/lazydev.nvim", @@ -378,7 +390,7 @@ return }, { name = "live-preview.nvim", url = "brianhuster/live-preview.nvim", - version = "0.8.1-1" + version = "0.8.3-1" }, { name = "logging.nvim", url = "NTBBloodbath/logging.nvim", @@ -403,6 +415,10 @@ return name = "ltreesitter", url = "euclidianAce/ltreesitter", version = "0.0.7-1" + }, { + name = "lua-console.nvim", + url = "YaroSpace/lua-console.nvim", + version = "1.1.0-1" }, { name = "lua-obfuscator.nvim", url = "git+ssh://git@github.com/kdssoftware/lua-obfuscator.nvim.git", @@ -434,7 +450,7 @@ return }, { name = "magazine.nvim", url = "iguanacucumber/magazine.nvim", - version = "0.2.1-1" + version = "0.4.1-1" }, { name = "mapx.nvim", url = "b0o/mapx.nvim", @@ -538,7 +554,7 @@ return }, { name = "neotest-busted", url = "MisanthropicBit/neotest-busted", - version = "0.2.1-1" + version = "0.3.0-1" }, { name = "neotest-golang", url = "fredrikaverpil/neotest-golang", @@ -550,11 +566,11 @@ return }, { name = "neotest-java", url = "rcasia/neotest-java", - version = "0.17.5-1" + version = "0.17.6-1" }, { name = "neotest-zig", url = "lawrence-laz/neotest-zig", - version = "1.3.0-1" + version = "1.3.1-1" }, { name = "netman.nvim", url = "miversen33/netman.nvim", @@ -570,7 +586,7 @@ return }, { name = "noice.nvim", url = "folke/noice.nvim", - version = "4.6.0-1" + version = "4.7.2-1" }, { name = "npackages.nvim", url = "diegofigs/npackages.nvim", @@ -586,11 +602,11 @@ return }, { name = "nvim-a2-pack", url = "dfgordon/nvim-a2-pack", - version = "0.2.0-1" + version = "0.3.0-1" }, { name = "nvim-best-practices-plugin-template", url = "ColinKennedy/nvim-best-practices-plugin-template", - version = "1.3.1-1" + version = "1.3.2-1" }, { name = "nvim-bqf", url = "kevinhwang91/nvim-bqf", @@ -726,11 +742,11 @@ return }, { name = "oil.nvim", url = "stevearc/oil.nvim", - version = "2.12.2-1" + version = "2.13.0-1" }, { name = "onedarkpro.nvim", url = "olimorris/onedarkpro.nvim", - version = "2.0.1-1" + version = "2.3.0-1" }, { name = "onenord.nvim", url = "rmehri01/onenord.nvim", @@ -742,7 +758,7 @@ return }, { name = "overseer.nvim", url = "stevearc/overseer.nvim", - version = "1.4.0-1" + version = "1.5.0-1" }, { name = "oz.nvim", url = "luxluth/oz.nvim", @@ -794,7 +810,7 @@ return }, { name = "quicker.nvim", url = "stevearc/quicker.nvim", - version = "1.1.1-1" + version = "1.2.0-1" }, { name = "rainbow-delimiters.nvim", url = "HiPhish/rainbow-delimiters.nvim", @@ -810,11 +826,11 @@ return }, { name = "render-markdown.nvim", url = "MeanderingProgrammer/render-markdown.nvim", - version = "7.4.0-1" + version = "7.5.0-1" }, { name = "rest.nvim", url = "rest-nvim/rest.nvim", - version = "3.8.3-1" + version = "3.8.4-1" }, { name = "rime.nvim", url = "Freed-Wu/rime.nvim", @@ -838,11 +854,11 @@ return }, { name = "rocks-treesitter.nvim", url = "nvim-neorocks/rocks-treesitter.nvim", - version = "1.1.3-1" + version = "1.2.0-1" }, { name = "rocks.nvim", url = "nvim-neorocks/rocks.nvim", - version = "2.41.1-1" + version = "2.42.2-1" }, { name = "rtp.nvim", url = "nvim-neorocks/rtp.nvim", @@ -854,7 +870,7 @@ return }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "5.13.1-1" + version = "5.15.0-1" }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", @@ -874,7 +890,7 @@ return }, { name = "sf.nvim", url = "xixiaofinland/sf.nvim", - version = "1.8.0-1" + version = "1.9.0-1" }, { name = "sg.nvim", url = "sourcegraph/sg.nvim", @@ -884,9 +900,9 @@ return url = "mrjones2014/smart-splits.nvim", version = "1.6.0-1" }, { - name = "snippets.nvim", - url = "Kibadda/snippets.nvim", - version = "1.0.0-1" + name = "snacks.nvim", + url = "folke/snacks.nvim", + version = "2.4.0-1" }, { name = "sos.nvim", url = "tmillr/sos.nvim", @@ -927,6 +943,10 @@ return name = "tangerine.nvim", url = "udayvir-singh/tangerine.nvim", version = "2.9-1" + }, { + name = "teacup.neovim", + url = "Clivern/teacup.neovim", + version = "0.0.1-1" }, { name = "telescope-zf-native.nvim", url = "natecraddock/telescope-zf-native.nvim", @@ -942,11 +962,11 @@ return }, { name = "toggleterm.nvim", url = "akinsho/toggleterm.nvim", - version = "2.12.0-1" + version = "2.13.0-1" }, { name = "tokyonight.nvim", url = "folke/tokyonight.nvim", - version = "4.9.0-1" + version = "4.10.0-1" }, { name = "tree-sitter-ada", url = "briot/tree-sitter-ada", @@ -954,7 +974,7 @@ return }, { name = "tree-sitter-agda", url = "tree-sitter/tree-sitter-agda", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-angular", url = "dlvandenberg/tree-sitter-angular", @@ -986,7 +1006,7 @@ return }, { name = "tree-sitter-bash", url = "tree-sitter/tree-sitter-bash", - version = "0.0.32-1" + version = "0.0.35-1" }, { name = "tree-sitter-bass", url = "vito/tree-sitter-bass", @@ -1018,11 +1038,11 @@ return }, { name = "tree-sitter-c", url = "tree-sitter/tree-sitter-c", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-c_sharp", url = "tree-sitter/tree-sitter-c-sharp", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-cairo", url = "tree-sitter-grammars/tree-sitter-cairo", @@ -1066,11 +1086,11 @@ return }, { name = "tree-sitter-cpp", url = "tree-sitter/tree-sitter-cpp", - version = "0.0.32-1" + version = "0.0.35-1" }, { name = "tree-sitter-css", url = "tree-sitter/tree-sitter-css", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-csv", url = "tree-sitter-grammars/tree-sitter-csv", @@ -1094,19 +1114,19 @@ return }, { name = "tree-sitter-dart", url = "UserNobody14/tree-sitter-dart", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-desktop", url = "ValdezFOmar/tree-sitter-desktop", - version = "0.0.4-1" + version = "0.0.6-1" }, { name = "tree-sitter-devicetree", url = "joelspadin/tree-sitter-devicetree", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-dhall", url = "jbellerb/tree-sitter-dhall", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-diff", url = "the-mikedavis/tree-sitter-diff", @@ -1134,11 +1154,11 @@ return }, { name = "tree-sitter-dtd", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-earthfile", url = "glehmann/tree-sitter-earthfile", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-ebnf", url = "RubixDev/ebnf", @@ -1150,7 +1170,7 @@ return }, { name = "tree-sitter-editorconfig", url = "ValdezFOmar/tree-sitter-editorconfig", - version = "0.0.37-1" + version = "0.0.41-1" }, { name = "tree-sitter-eds", url = "uyha/tree-sitter-eds", @@ -1178,7 +1198,7 @@ return }, { name = "tree-sitter-embedded_template", url = "tree-sitter/tree-sitter-embedded-template", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-erlang", url = "WhatsApp/tree-sitter-erlang", @@ -1210,7 +1230,7 @@ return }, { name = "tree-sitter-foam", url = "FoamScience/tree-sitter-foam", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-forth", url = "AlexanderBrevig/tree-sitter-forth", @@ -1246,7 +1266,7 @@ return }, { name = "tree-sitter-gdscript", url = "PrestonKnopp/tree-sitter-gdscript", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-gdshader", url = "GodOfAvacyn/tree-sitter-gdshader", @@ -1262,7 +1282,7 @@ return }, { name = "tree-sitter-gitattributes", url = "tree-sitter-grammars/tree-sitter-gitattributes", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-gitcommit", url = "gbprod/tree-sitter-gitcommit", @@ -1302,7 +1322,7 @@ return }, { name = "tree-sitter-go", url = "tree-sitter/tree-sitter-go", - version = "0.0.31-1" + version = "0.0.34-1" }, { name = "tree-sitter-goctl", url = "chaozwn/tree-sitter-goctl", @@ -1338,7 +1358,7 @@ return }, { name = "tree-sitter-gren", url = "MaeBrooks/tree-sitter-gren", - version = "0.0.2-1" + version = "0.0.3-1" }, { name = "tree-sitter-groovy", url = "murtaza64/tree-sitter-groovy", @@ -1358,7 +1378,7 @@ return }, { name = "tree-sitter-haskell", url = "tree-sitter/tree-sitter-haskell", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-haskell_persistent", url = "MercuryTechnologies/tree-sitter-haskell-persistent", @@ -1398,7 +1418,7 @@ return }, { name = "tree-sitter-html", url = "tree-sitter/tree-sitter-html", - version = "0.0.30-1" + version = "0.0.33-1" }, { name = "tree-sitter-html_tags", url = "nvim-neorocks/luarocks-stub", @@ -1422,7 +1442,7 @@ return }, { name = "tree-sitter-idl", url = "cathaysia/tree-sitter-idl", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-ini", url = "justinmk/tree-sitter-ini", @@ -1430,7 +1450,7 @@ return }, { name = "tree-sitter-inko", url = "inko-lang/tree-sitter-inko", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-ispc", url = "tree-sitter-grammars/tree-sitter-ispc", @@ -1442,11 +1462,11 @@ return }, { name = "tree-sitter-java", url = "tree-sitter/tree-sitter-java", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-javascript", url = "tree-sitter/tree-sitter-javascript", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-jq", url = "flurie/tree-sitter-jq", @@ -1454,11 +1474,11 @@ return }, { name = "tree-sitter-jsdoc", url = "tree-sitter/tree-sitter-jsdoc", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-json", url = "tree-sitter/tree-sitter-json", - version = "0.0.30-1" + version = "0.0.33-1" }, { name = "tree-sitter-json5", url = "Joakker/tree-sitter-json5", @@ -1478,11 +1498,11 @@ return }, { name = "tree-sitter-julia", url = "tree-sitter/tree-sitter-julia", - version = "0.0.30-1" + version = "0.0.34-1" }, { name = "tree-sitter-just", url = "IndianBoy42/tree-sitter-just", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-kconfig", url = "tree-sitter-grammars/tree-sitter-kconfig", @@ -1510,7 +1530,7 @@ return }, { name = "tree-sitter-latex", url = "latex-lsp/tree-sitter-latex", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-ledger", url = "cbarrete/tree-sitter-ledger", @@ -1586,7 +1606,7 @@ return }, { name = "tree-sitter-mlir", url = "artagnon/tree-sitter-mlir", - version = "0.0.35-1" + version = "0.0.38-1" }, { name = "tree-sitter-muttrc", url = "neomutt/tree-sitter-muttrc", @@ -1618,7 +1638,7 @@ return }, { name = "tree-sitter-nix", url = "cstrahan/tree-sitter-nix", - version = "0.0.45-1" + version = "0.0.50-1" }, { name = "tree-sitter-norg", url = "nvim-neorg/tree-sitter-norg", @@ -1631,6 +1651,10 @@ return name = "tree-sitter-nqc", url = "tree-sitter-grammars/tree-sitter-nqc", version = "0.0.30-1" + }, { + name = "tree-sitter-nu", + url = "nushell/tree-sitter-nu", + version = "0.0.12-1" }, { name = "tree-sitter-objc", url = "tree-sitter-grammars/tree-sitter-objc", @@ -1642,11 +1666,11 @@ return }, { name = "tree-sitter-ocaml", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-ocaml_interface", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.33-1" + version = "0.0.35-1" }, { name = "tree-sitter-ocamllex", url = "atom-ocaml/tree-sitter-ocamllex", @@ -1678,15 +1702,15 @@ return }, { name = "tree-sitter-perl", url = "tree-sitter-perl/tree-sitter-perl", - version = "0.0.35-1" + version = "0.0.36-1" }, { name = "tree-sitter-php", url = "tree-sitter/tree-sitter-php", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-php_only", url = "tree-sitter/tree-sitter-php", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-phpdoc", url = "claytonrcarter/tree-sitter-phpdoc", @@ -1718,7 +1742,7 @@ return }, { name = "tree-sitter-printf", url = "tree-sitter-grammars/tree-sitter-printf", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-prisma", url = "victorhqc/tree-sitter-prisma", @@ -1738,7 +1762,7 @@ return }, { name = "tree-sitter-properties", url = "tree-sitter-grammars/tree-sitter-properties", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-proto", url = "treywood/tree-sitter-proto", @@ -1754,7 +1778,7 @@ return }, { name = "tree-sitter-pug", url = "zealot128/tree-sitter-pug", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-puppet", url = "tree-sitter-grammars/tree-sitter-puppet", @@ -1770,11 +1794,11 @@ return }, { name = "tree-sitter-python", url = "tree-sitter/tree-sitter-python", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-ql", url = "tree-sitter/tree-sitter-ql", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-qmldir", url = "tree-sitter-grammars/tree-sitter-qmldir", @@ -1786,11 +1810,11 @@ return }, { name = "tree-sitter-query", url = "tree-sitter-grammars/tree-sitter-query", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-r", url = "r-lib/tree-sitter-r", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-racket", url = "6cdh/tree-sitter-racket", @@ -1818,7 +1842,7 @@ return }, { name = "tree-sitter-regex", url = "tree-sitter/tree-sitter-regex", - version = "0.0.33-1" + version = "0.0.37-1" }, { name = "tree-sitter-rego", url = "FallenAngel97/tree-sitter-rego", @@ -1858,15 +1882,19 @@ return }, { name = "tree-sitter-ruby", url = "tree-sitter/tree-sitter-ruby", - version = "0.0.32-1" + version = "0.0.33-1" + }, { + name = "tree-sitter-runescript", + url = "2004Scape/tree-sitter-runescript", + version = "0.0.1-1" }, { name = "tree-sitter-rust", url = "tree-sitter/tree-sitter-rust", - version = "0.0.33-1" + version = "0.0.35-1" }, { name = "tree-sitter-scala", url = "tree-sitter/tree-sitter-scala", - version = "0.0.36-1" + version = "0.0.37-1" }, { name = "tree-sitter-scfg", url = "rockorager/tree-sitter-scfg", @@ -1926,7 +1954,7 @@ return }, { name = "tree-sitter-sql", url = "derekstride/tree-sitter-sql", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-squirrel", url = "tree-sitter-grammars/tree-sitter-squirrel", @@ -1934,7 +1962,7 @@ return }, { name = "tree-sitter-ssh_config", url = "tree-sitter-grammars/tree-sitter-ssh-config", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-starlark", url = "tree-sitter-grammars/tree-sitter-starlark", @@ -1954,7 +1982,7 @@ return }, { name = "tree-sitter-superhtml", url = "kristoff-it/superhtml", - version = "0.0.9-1" + version = "0.0.10-1" }, { name = "tree-sitter-surface", url = "connorlay/tree-sitter-surface", @@ -1963,10 +1991,14 @@ return name = "tree-sitter-svelte", url = "tree-sitter-grammars/tree-sitter-svelte", version = "0.0.32-1" + }, { + name = "tree-sitter-sway", + url = "FuelLabs/tree-sitter-sway", + version = "0.0.3-1" }, { name = "tree-sitter-swift", url = "alex-pinkus/tree-sitter-swift", - version = "0.0.36-1" + version = "0.0.38-1" }, { name = "tree-sitter-sxhkdrc", url = "RaafatTurki/tree-sitter-sxhkdrc", @@ -1981,8 +2013,8 @@ return version = "0.0.29-1" }, { name = "tree-sitter-t32", - url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/e455373021812abf4a0b5170caa0d882a9578bab.zip", - version = "0.0.31-1" + url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/476f0d8ab4b012d3b6f9598890217ada70f1a8ba.zip", + version = "0.0.34-1" }, { name = "tree-sitter-tablegen", url = "tree-sitter-grammars/tree-sitter-tablegen", @@ -1994,15 +2026,15 @@ return }, { name = "tree-sitter-tcl", url = "tree-sitter-grammars/tree-sitter-tcl", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-teal", url = "euclidianAce/tree-sitter-teal", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-templ", url = "vrischmann/tree-sitter-templ", - version = "0.0.34-1" + version = "0.0.37-1" }, { name = "tree-sitter-terraform", url = "MichaHoffmann/tree-sitter-hcl", @@ -2042,7 +2074,7 @@ return }, { name = "tree-sitter-tsx", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-turtle", url = "GordianDziwis/tree-sitter-turtle", @@ -2054,7 +2086,7 @@ return }, { name = "tree-sitter-typescript", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-typespec", url = "happenslol/tree-sitter-typespec", @@ -2066,11 +2098,11 @@ return }, { name = "tree-sitter-typst", url = "uben0/tree-sitter-typst", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-udev", url = "tree-sitter-grammars/tree-sitter-udev", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-ungrammar", url = "tree-sitter-grammars/tree-sitter-ungrammar", @@ -2078,7 +2110,7 @@ return }, { name = "tree-sitter-unison", url = "kylegoetz/tree-sitter-unison", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-usd", url = "ColinKennedy/tree-sitter-usd", @@ -2090,7 +2122,7 @@ return }, { name = "tree-sitter-v", url = "vlang/v-analyzer", - version = "0.0.34-1" + version = "0.0.38-1" }, { name = "tree-sitter-vala", url = "vala-lang/tree-sitter-vala", @@ -2106,7 +2138,7 @@ return }, { name = "tree-sitter-vhdl", url = "jpt13653903/tree-sitter-vhdl", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-vhs", url = "charmbracelet/tree-sitter-vhs", @@ -2130,7 +2162,7 @@ return }, { name = "tree-sitter-wgsl", url = "szebniok/tree-sitter-wgsl", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-wgsl_bevy", url = "tree-sitter-grammars/tree-sitter-wgsl-bevy", @@ -2150,11 +2182,11 @@ return }, { name = "tree-sitter-xml", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-xresources", url = "ValdezFOmar/tree-sitter-xresources", - version = "0.0.4-1" + version = "0.0.10-1" }, { name = "tree-sitter-yaml", url = "tree-sitter-grammars/tree-sitter-yaml", @@ -2174,19 +2206,19 @@ return }, { name = "tree-sitter-zig", url = "tree-sitter-grammars/tree-sitter-zig", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-ziggy", url = "kristoff-it/ziggy", - version = "0.0.6-1" + version = "0.0.7-1" }, { name = "tree-sitter-ziggy_schema", url = "kristoff-it/ziggy", - version = "0.0.6-1" + version = "0.0.7-1" }, { name = "treedoc.nvim", url = "neo451/treedoc.nvim", - version = "1.0.1-1" + version = "1.0.3-1" }, { name = "trouble.nvim", url = "folke/trouble.nvim", @@ -2203,6 +2235,10 @@ return name = "twilight.nvim", url = "folke/twilight.nvim", version = "1.0.0-1" + }, { + name = "u.nvim", + url = "jrop/u.nvim", + version = "0.2.0-1" }, { name = "unimpaired.nvim", url = "tummetott/unimpaired.nvim", @@ -2219,6 +2255,10 @@ return name = "windline.nvim", url = "windwp/windline.nvim", version = "1.1.0-1" + }, { + name = "wormhole.nvim", + url = "NStefan002/wormhole.nvim", + version = "1.1.1-1" }, { name = "wrapping-paper.nvim", url = "benlubas/wrapping-paper.nvim", @@ -2230,7 +2270,7 @@ return }, { name = "yazi.nvim", url = "mikavilpas/yazi.nvim", - version = "6.4.3-1" + version = "6.6.0-1" }, { name = "zen-mode.nvim", url = "folke/zen-mode.nvim", From 9570a5ae7b17dcde4718c7458fd986c10f015a99 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 5 Dec 2024 09:06:28 +0100 Subject: [PATCH 787/815] feat(plugin): show error for local plugins that don't exist. Fixes #1773 --- lua/lazy/core/plugin.lua | 1 + lua/lazy/manage/init.lua | 3 +++ lua/lazy/manage/task/plugin.lua | 11 +++++++++++ 3 files changed, 15 insertions(+) diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 97347a7..a282132 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -243,6 +243,7 @@ function M.update_state() else plugin._.is_local = true plugin._.installed = true -- local plugins are managed by the user + plugin._.installed = vim.fn.isdirectory(plugin.dir) == 1 end end diff --git a/lua/lazy/manage/init.lua b/lua/lazy/manage/init.lua index ac9ba14..e28d9dd 100644 --- a/lua/lazy/manage/init.lua +++ b/lua/lazy/manage/init.lua @@ -80,6 +80,7 @@ function M.install(opts) opts = M.opts(opts, { mode = "install" }) return M.run({ pipeline = { + "plugin.exists", "git.clone", { "git.checkout", lockfile = opts.lockfile }, "plugin.docs", @@ -108,6 +109,7 @@ function M.update(opts) opts = M.opts(opts, { mode = "update" }) return M.run({ pipeline = { + "plugin.exists", "git.origin", "git.branch", "git.fetch", @@ -147,6 +149,7 @@ function M.check(opts) opts = opts or {} return M.run({ pipeline = { + "plugin.exists", { "git.origin", check = true }, "git.fetch", "git.status", diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index c8a2bdb..841cc6c 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -97,4 +97,15 @@ M.docs = { end, } +M.exists = { + skip = function(plugin) + return not plugin._.is_local + end, + run = function(self) + if not Util.file_exists(self.plugin.dir) then + self:error("Local plugin does not exist at `" .. self.plugin.dir .. "`") + end + end, +} + return M From a44e9cd165e11fa61ccfbea2a3cc1aaa3bcfc4f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 09:10:16 +0100 Subject: [PATCH 788/815] chore(main): release 11.15.0 (#1835) :robot: I have created a release *beep* *boop* --- ## [11.15.0](https://github.com/folke/lazy.nvim/compare/v11.14.2...v11.15.0) (2024-12-05) ### Features * **plugin:** show error for local plugins that don't exist. Fixes [#1773](https://github.com/folke/lazy.nvim/issues/1773) ([9570a5a](https://github.com/folke/lazy.nvim/commit/9570a5ae7b17dcde4718c7458fd986c10f015a99)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 87f2b31..23b0e13 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.14.2" + ".": "11.15.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index f76a332..6ec2c9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.15.0](https://github.com/folke/lazy.nvim/compare/v11.14.2...v11.15.0) (2024-12-05) + + +### Features + +* **plugin:** show error for local plugins that don't exist. Fixes [#1773](https://github.com/folke/lazy.nvim/issues/1773) ([9570a5a](https://github.com/folke/lazy.nvim/commit/9570a5ae7b17dcde4718c7458fd986c10f015a99)) + ## [11.14.2](https://github.com/folke/lazy.nvim/compare/v11.14.1...v11.14.2) (2024-11-10) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 8f56d52..3b32f5c 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -241,7 +241,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.14.2" -- x-release-please-version +M.version = "11.15.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 3388a26417c48b15d5266d954f62a4d47fe99490 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 5 Dec 2024 08:11:36 +0000 Subject: [PATCH 789/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 184 ++++++++++++++++-------------- 1 file changed, 100 insertions(+), 84 deletions(-) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index 5c2bed1..6cfdb3f 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -34,7 +34,7 @@ return }, { name = "autosave.nvim", url = "brianhuster/autosave.nvim", - version = "0.4.1-1" + version = "0.4.2-1" }, { name = "banana.nvim", url = "CWood-sdf/banana.nvim", @@ -54,7 +54,7 @@ return }, { name = "bufferline.nvim", url = "akinsho/bufferline.nvim", - version = "4.8.0-1" + version = "4.9.0-1" }, { name = "care.nvim", url = "max397574/care.nvim", @@ -106,7 +106,7 @@ return }, { name = "commons.nvim", url = "linrongbin16/commons.nvim", - version = "19.0.0-1" + version = "21.1.0-1" }, { name = "conform.nvim", url = "stevearc/conform.nvim", @@ -114,7 +114,7 @@ return }, { name = "cursor-text-objects.nvim", url = "ColinKennedy/cursor-text-objects.nvim", - version = "1.1.0-1" + version = "1.3.0-1" }, { name = "cybu.nvim", url = "ghillb/cybu.nvim", @@ -162,7 +162,7 @@ return }, { name = "doris.nvim", url = "jackokring/doris.nvim", - version = "0.2.0-1" + version = "0.3.2-1" }, { name = "dressing.nvim", url = "stevearc/dressing.nvim", @@ -170,7 +170,7 @@ return }, { name = "dropbar.nvim", url = "Bekaboo/dropbar.nvim", - version = "9.0.1-1" + version = "9.0.2-1" }, { name = "duck.nvim", url = "tamton-aquib/duck.nvim", @@ -198,7 +198,7 @@ return }, { name = "feed.nvim", url = "neo451/feed.nvim", - version = "1.9.1-1" + version = "1.12.0-1" }, { name = "feline.nvim", url = "freddiehaddad/feline.nvim", @@ -242,7 +242,7 @@ return }, { name = "fzfx.nvim", url = "linrongbin16/fzfx.nvim", - version = "6.4.0-1" + version = "7.0.0-1" }, { name = "galileo.nvim", url = "S1M0N38/galileo.nvim", @@ -266,7 +266,7 @@ return }, { name = "gitlinker.nvim", url = "linrongbin16/gitlinker.nvim", - version = "4.13.2-1" + version = "5.0.0-1" }, { name = "gitsigns.nvim", url = "lewis6991/gitsigns.nvim", @@ -294,7 +294,7 @@ return }, { name = "guard.nvim", url = "nvimdev/guard.nvim", - version = "1.0.3-1" + version = "1.0.4-1" }, { name = "hardhat.nvim", url = "TheSnakeWitcher/hardhat.nvim", @@ -306,7 +306,7 @@ return }, { name = "haskell-tools.nvim", url = "mrcjkb/haskell-tools.nvim", - version = "4.3.1-1" + version = "4.3.2-1" }, { name = "headlines.nvim", url = "lukas-reineke/headlines.nvim", @@ -350,7 +350,7 @@ return }, { name = "indent-blankline.nvim", url = "lukas-reineke/indent-blankline.nvim", - version = "3.8.5-1" + version = "3.8.6-1" }, { name = "kai.nvim", url = "Kamilcuk/kai.nvim", @@ -370,7 +370,7 @@ return }, { name = "lazydev.nvim", url = "folke/lazydev.nvim", - version = "1.8.0-1" + version = "1.9.0-1" }, { name = "lean.nvim", url = "Julian/lean.nvim", @@ -415,6 +415,10 @@ return name = "ltreesitter", url = "euclidianAce/ltreesitter", version = "0.0.7-1" + }, { + name = "ltreesitter-ts", + url = "FourierTransformer/ltreesitter-ts", + version = "0.0.1-1" }, { name = "lua-console.nvim", url = "YaroSpace/lua-console.nvim", @@ -431,6 +435,10 @@ return name = "lua-utils.nvim", url = "nvim-neorg/lua-utils.nvim", version = "1.0.2-1" + }, { + name = "luarocks-build-tree-sitter-cli", + url = "FourierTransformer/luarocks-build-tree-sitter-cli", + version = "0.0.2-1" }, { name = "luarocks-build-treesitter-parser", url = "nvim-neorocks/luarocks-build-treesitter-parser", @@ -530,7 +538,7 @@ return }, { name = "neorg-interim-ls", url = "benlubas/neorg-interim-ls", - version = "1.2.1-1" + version = "1.3.0-1" }, { name = "neorg-se", url = "benlubas/neorg-se", @@ -582,7 +590,7 @@ return }, { name = "no-neck-pain.nvim", url = "shortcuts/no-neck-pain.nvim", - version = "2.0.6-1" + version = "2.1.3-1" }, { name = "noice.nvim", url = "folke/noice.nvim", @@ -606,7 +614,7 @@ return }, { name = "nvim-best-practices-plugin-template", url = "ColinKennedy/nvim-best-practices-plugin-template", - version = "1.3.2-1" + version = "1.4.0-1" }, { name = "nvim-bqf", url = "kevinhwang91/nvim-bqf", @@ -826,7 +834,7 @@ return }, { name = "render-markdown.nvim", url = "MeanderingProgrammer/render-markdown.nvim", - version = "7.5.0-1" + version = "7.6.0-1" }, { name = "rest.nvim", url = "rest-nvim/rest.nvim", @@ -838,7 +846,7 @@ return }, { name = "rocks-config.nvim", url = "nvim-neorocks/rocks-config.nvim", - version = "3.0.0-1" + version = "3.1.0-1" }, { name = "rocks-dev.nvim", url = "nvim-neorocks/rocks-dev.nvim", @@ -870,7 +878,7 @@ return }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "5.15.0-1" + version = "5.17.1-1" }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", @@ -898,11 +906,11 @@ return }, { name = "smart-splits.nvim", url = "mrjones2014/smart-splits.nvim", - version = "1.6.0-1" + version = "1.7.0-1" }, { name = "snacks.nvim", url = "folke/snacks.nvim", - version = "2.4.0-1" + version = "2.6.0-1" }, { name = "sos.nvim", url = "tmillr/sos.nvim", @@ -982,11 +990,11 @@ return }, { name = "tree-sitter-apex", url = "aheber/tree-sitter-sfapex", - version = "0.0.36-1" + version = "0.0.39-1" }, { name = "tree-sitter-arduino", url = "tree-sitter-grammars/tree-sitter-arduino", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-asm", url = "RubixDev/tree-sitter-asm", @@ -994,7 +1002,7 @@ return }, { name = "tree-sitter-astro", url = "virchau13/tree-sitter-astro", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-authzed", url = "mleonidas/tree-sitter-authzed", @@ -1006,7 +1014,7 @@ return }, { name = "tree-sitter-bash", url = "tree-sitter/tree-sitter-bash", - version = "0.0.35-1" + version = "0.0.36-1" }, { name = "tree-sitter-bass", url = "vito/tree-sitter-bass", @@ -1042,7 +1050,7 @@ return }, { name = "tree-sitter-c_sharp", url = "tree-sitter/tree-sitter-c-sharp", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-cairo", url = "tree-sitter-grammars/tree-sitter-cairo", @@ -1054,7 +1062,11 @@ return }, { name = "tree-sitter-chatito", url = "tree-sitter-grammars/tree-sitter-chatito", - version = "0.0.29-1" + version = "0.0.30-1" + }, { + name = "tree-sitter-cli", + url = "FourierTransformer/tree-sitter-cli", + version = "0.24.4-1" }, { name = "tree-sitter-clojure", url = "sogaiu/tree-sitter-clojure", @@ -1154,7 +1166,7 @@ return }, { name = "tree-sitter-dtd", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-earthfile", url = "glehmann/tree-sitter-earthfile", @@ -1170,7 +1182,7 @@ return }, { name = "tree-sitter-editorconfig", url = "ValdezFOmar/tree-sitter-editorconfig", - version = "0.0.41-1" + version = "0.0.44-1" }, { name = "tree-sitter-eds", url = "uyha/tree-sitter-eds", @@ -1182,7 +1194,7 @@ return }, { name = "tree-sitter-elixir", url = "elixir-lang/tree-sitter-elixir", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-elm", url = "elm-tooling/tree-sitter-elm", @@ -1238,7 +1250,7 @@ return }, { name = "tree-sitter-fortran", url = "stadelmanma/tree-sitter-fortran", - version = "0.0.34-1" + version = "0.0.36-1" }, { name = "tree-sitter-fsh", url = "mgramigna/tree-sitter-fsh", @@ -1294,7 +1306,7 @@ return }, { name = "tree-sitter-gleam", url = "gleam-lang/tree-sitter-gleam", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-glimmer", url = "ember-tooling/tree-sitter-glimmer", @@ -1322,7 +1334,7 @@ return }, { name = "tree-sitter-go", url = "tree-sitter/tree-sitter-go", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-goctl", url = "chaozwn/tree-sitter-goctl", @@ -1334,7 +1346,7 @@ return }, { name = "tree-sitter-gomod", url = "camdencheek/tree-sitter-go-mod", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-gosum", url = "tree-sitter-grammars/tree-sitter-go-sum", @@ -1350,7 +1362,7 @@ return }, { name = "tree-sitter-gpg", url = "tree-sitter-grammars/tree-sitter-gpg-config", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-graphql", url = "bkegley/tree-sitter-graphql", @@ -1414,7 +1426,7 @@ return }, { name = "tree-sitter-hoon", url = "urbit-pilled/tree-sitter-hoon", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-html", url = "tree-sitter/tree-sitter-html", @@ -1430,7 +1442,7 @@ return }, { name = "tree-sitter-http", url = "rest-nvim/tree-sitter-http", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-hurl", url = "pfeiferj/tree-sitter-hurl", @@ -1450,7 +1462,7 @@ return }, { name = "tree-sitter-inko", url = "inko-lang/tree-sitter-inko", - version = "0.0.32-1" + version = "0.0.36-1" }, { name = "tree-sitter-ispc", url = "tree-sitter-grammars/tree-sitter-ispc", @@ -1462,7 +1474,7 @@ return }, { name = "tree-sitter-java", url = "tree-sitter/tree-sitter-java", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-javascript", url = "tree-sitter/tree-sitter-javascript", @@ -1474,7 +1486,7 @@ return }, { name = "tree-sitter-jsdoc", url = "tree-sitter/tree-sitter-jsdoc", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-json", url = "tree-sitter/tree-sitter-json", @@ -1498,11 +1510,11 @@ return }, { name = "tree-sitter-julia", url = "tree-sitter/tree-sitter-julia", - version = "0.0.34-1" + version = "0.0.38-1" }, { name = "tree-sitter-just", url = "IndianBoy42/tree-sitter-just", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-kconfig", url = "tree-sitter-grammars/tree-sitter-kconfig", @@ -1534,7 +1546,7 @@ return }, { name = "tree-sitter-ledger", url = "cbarrete/tree-sitter-ledger", - version = "0.0.30-1" + version = "0.0.33-1" }, { name = "tree-sitter-leo", url = "r001/tree-sitter-leo", @@ -1582,11 +1594,11 @@ return }, { name = "tree-sitter-markdown", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.35-1" + version = "0.0.36-1" }, { name = "tree-sitter-markdown_inline", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.35-1" + version = "0.0.36-1" }, { name = "tree-sitter-matlab", url = "acristoffers/tree-sitter-matlab", @@ -1606,7 +1618,7 @@ return }, { name = "tree-sitter-mlir", url = "artagnon/tree-sitter-mlir", - version = "0.0.38-1" + version = "0.0.40-1" }, { name = "tree-sitter-muttrc", url = "neomutt/tree-sitter-muttrc", @@ -1614,7 +1626,7 @@ return }, { name = "tree-sitter-nasm", url = "naclsn/tree-sitter-nasm", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-nginx", url = "opa-oz/tree-sitter-nginx", @@ -1638,7 +1650,7 @@ return }, { name = "tree-sitter-nix", url = "cstrahan/tree-sitter-nix", - version = "0.0.50-1" + version = "0.0.51-1" }, { name = "tree-sitter-norg", url = "nvim-neorg/tree-sitter-norg", @@ -1654,7 +1666,7 @@ return }, { name = "tree-sitter-nu", url = "nushell/tree-sitter-nu", - version = "0.0.12-1" + version = "0.0.20-1" }, { name = "tree-sitter-objc", url = "tree-sitter-grammars/tree-sitter-objc", @@ -1698,19 +1710,19 @@ return }, { name = "tree-sitter-pem", url = "tree-sitter-grammars/tree-sitter-pem", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-perl", url = "tree-sitter-perl/tree-sitter-perl", - version = "0.0.36-1" + version = "0.0.37-1" }, { name = "tree-sitter-php", url = "tree-sitter/tree-sitter-php", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-php_only", url = "tree-sitter/tree-sitter-php", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-phpdoc", url = "claytonrcarter/tree-sitter-phpdoc", @@ -1730,7 +1742,7 @@ return }, { name = "tree-sitter-poe_filter", url = "tree-sitter-grammars/tree-sitter-poe-filter", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-pony", url = "tree-sitter-grammars/tree-sitter-pony", @@ -1738,7 +1750,7 @@ return }, { name = "tree-sitter-powershell", url = "airbus-cert/tree-sitter-powershell", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-printf", url = "tree-sitter-grammars/tree-sitter-printf", @@ -1794,7 +1806,7 @@ return }, { name = "tree-sitter-python", url = "tree-sitter/tree-sitter-python", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-ql", url = "tree-sitter/tree-sitter-ql", @@ -1814,7 +1826,7 @@ return }, { name = "tree-sitter-r", url = "r-lib/tree-sitter-r", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-racket", url = "6cdh/tree-sitter-racket", @@ -1862,7 +1874,7 @@ return }, { name = "tree-sitter-robot", url = "Hubro/tree-sitter-robot", - version = "0.0.29-1" + version = "0.0.32-1" }, { name = "tree-sitter-robots", url = "opa-oz/tree-sitter-robots-txt", @@ -1890,11 +1902,11 @@ return }, { name = "tree-sitter-rust", url = "tree-sitter/tree-sitter-rust", - version = "0.0.35-1" + version = "0.0.37-1" }, { name = "tree-sitter-scala", url = "tree-sitter/tree-sitter-scala", - version = "0.0.37-1" + version = "0.0.39-1" }, { name = "tree-sitter-scfg", url = "rockorager/tree-sitter-scfg", @@ -1910,7 +1922,7 @@ return }, { name = "tree-sitter-sflog", url = "aheber/tree-sitter-sfapex", - version = "0.0.34-1" + version = "0.0.36-1" }, { name = "tree-sitter-slang", url = "tree-sitter-grammars/tree-sitter-slang", @@ -1934,15 +1946,15 @@ return }, { name = "tree-sitter-solidity", url = "JoranHonig/tree-sitter-solidity", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-soql", url = "aheber/tree-sitter-sfapex", - version = "0.0.35-1" + version = "0.0.37-1" }, { name = "tree-sitter-sosl", url = "aheber/tree-sitter-sfapex", - version = "0.0.34-1" + version = "0.0.36-1" }, { name = "tree-sitter-sourcepawn", url = "nilshelmig/tree-sitter-sourcepawn", @@ -1954,7 +1966,7 @@ return }, { name = "tree-sitter-sql", url = "derekstride/tree-sitter-sql", - version = "0.0.33-1" + version = "0.0.37-1" }, { name = "tree-sitter-squirrel", url = "tree-sitter-grammars/tree-sitter-squirrel", @@ -1974,7 +1986,7 @@ return }, { name = "tree-sitter-styled", url = "mskelton/tree-sitter-styled", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-supercollider", url = "madskjeldgaard/tree-sitter-supercollider", @@ -1982,7 +1994,7 @@ return }, { name = "tree-sitter-superhtml", url = "kristoff-it/superhtml", - version = "0.0.10-1" + version = "0.0.11-1" }, { name = "tree-sitter-surface", url = "connorlay/tree-sitter-surface", @@ -1998,7 +2010,7 @@ return }, { name = "tree-sitter-swift", url = "alex-pinkus/tree-sitter-swift", - version = "0.0.38-1" + version = "0.0.41-1" }, { name = "tree-sitter-sxhkdrc", url = "RaafatTurki/tree-sitter-sxhkdrc", @@ -2013,8 +2025,8 @@ return version = "0.0.29-1" }, { name = "tree-sitter-t32", - url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/476f0d8ab4b012d3b6f9598890217ada70f1a8ba.zip", - version = "0.0.34-1" + url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/7c8579685e34116c61971240780b316c54be698b.zip", + version = "0.0.37-1" }, { name = "tree-sitter-tablegen", url = "tree-sitter-grammars/tree-sitter-tablegen", @@ -2030,11 +2042,11 @@ return }, { name = "tree-sitter-teal", url = "euclidianAce/tree-sitter-teal", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-templ", url = "vrischmann/tree-sitter-templ", - version = "0.0.37-1" + version = "0.0.38-1" }, { name = "tree-sitter-terraform", url = "MichaHoffmann/tree-sitter-hcl", @@ -2066,7 +2078,7 @@ return }, { name = "tree-sitter-toml", url = "tree-sitter-grammars/tree-sitter-toml", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-tsv", url = "tree-sitter-grammars/tree-sitter-csv", @@ -2090,7 +2102,7 @@ return }, { name = "tree-sitter-typespec", url = "happenslol/tree-sitter-typespec", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-typoscript", url = "Teddytrombone/tree-sitter-typoscript", @@ -2134,11 +2146,11 @@ return }, { name = "tree-sitter-verilog", url = "gmlarumbe/tree-sitter-systemverilog", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-vhdl", url = "jpt13653903/tree-sitter-vhdl", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-vhs", url = "charmbracelet/tree-sitter-vhs", @@ -2146,7 +2158,7 @@ return }, { name = "tree-sitter-vim", url = "tree-sitter-grammars/tree-sitter-vim", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-vimdoc", url = "neovim/tree-sitter-vimdoc", @@ -2182,15 +2194,15 @@ return }, { name = "tree-sitter-xml", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-xresources", url = "ValdezFOmar/tree-sitter-xresources", - version = "0.0.10-1" + version = "0.0.12-1" }, { name = "tree-sitter-yaml", url = "tree-sitter-grammars/tree-sitter-yaml", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-yang", url = "Hubro/tree-sitter-yang", @@ -2206,7 +2218,7 @@ return }, { name = "tree-sitter-zig", url = "tree-sitter-grammars/tree-sitter-zig", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-ziggy", url = "kristoff-it/ziggy", @@ -2250,11 +2262,15 @@ return }, { name = "which-key.nvim", url = "folke/which-key.nvim", - version = "3.13.3-1" + version = "3.14.1-1" }, { name = "windline.nvim", url = "windwp/windline.nvim", version = "1.1.0-1" + }, { + name = "winmove.nvim", + url = "MisanthropicBit/winmove.nvim", + version = "0.1.0-1" }, { name = "wormhole.nvim", url = "NStefan002/wormhole.nvim", @@ -2270,7 +2286,7 @@ return }, { name = "yazi.nvim", url = "mikavilpas/yazi.nvim", - version = "6.6.0-1" + version = "6.6.1-1" }, { name = "zen-mode.nvim", url = "folke/zen-mode.nvim", @@ -2278,5 +2294,5 @@ return }, { name = "zk-nvim", url = "zk-org/zk-nvim", - version = "0.1.0-1" + version = "0.1.1-1" } } \ No newline at end of file From ee64abc76be2b237b95d241a924b0323005b868a Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 6 Dec 2024 20:28:50 +0100 Subject: [PATCH 790/815] feat(plugin): added support for virtual plugins. Closes #1836 --- lua/lazy/core/loader.lua | 8 ++++++-- lua/lazy/core/meta.lua | 2 ++ lua/lazy/core/plugin.lua | 6 ++++-- lua/lazy/core/util.lua | 2 +- lua/lazy/types.lua | 1 + 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index c6a7271..1501efd 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -341,7 +341,9 @@ function M._load(plugin, reason, opts) Util.track({ plugin = plugin.name, start = reason.start }) Handler.disable(plugin) - M.add_to_rtp(plugin) + if not plugin.virtual then + M.add_to_rtp(plugin) + end if plugin._.pkg and plugin._.pkg.source == "rockspec" then M.add_to_luapath(plugin) @@ -353,7 +355,9 @@ function M._load(plugin, reason, opts) end, "Failed to load deps for " .. plugin.name) end - M.packadd(plugin.dir) + if not plugin.virtual then + M.packadd(plugin.dir) + end if plugin.config or plugin.opts then M.config(plugin) end diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 6e781a0..abb2508 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -213,6 +213,8 @@ function M:_rebuild(name) plugin.dir = super.dir if plugin.dir then plugin.dir = Util.norm(plugin.dir) + elseif super.virtual then + plugin.dir = Util.norm("/dev/null/" .. plugin.name) else if plugin.dev == nil and plugin.url then for _, pattern in ipairs(Config.options.dev.patterns) do diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index a282132..37d1a8f 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -237,12 +237,14 @@ function M.update_state() or plugin.cmd plugin.lazy = lazy and true or false end - if plugin.dir:find(Config.options.root, 1, true) == 1 then + if plugin.virtual then + plugin._.is_local = true + plugin._.installed = true -- local plugins are managed by the user + elseif plugin.dir:find(Config.options.root, 1, true) == 1 then plugin._.installed = installed[plugin.name] ~= nil installed[plugin.name] = nil else plugin._.is_local = true - plugin._.installed = true -- local plugins are managed by the user plugin._.installed = vim.fn.isdirectory(plugin.dir) == 1 end end diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index bdd42dd..9db7f14 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -270,7 +270,7 @@ function M.get_unloaded_rtp(modname, opts) local Config = require("lazy.core.config") if Config.spec then for _, plugin in pairs(Config.spec.plugins) do - if not (plugin._.loaded or plugin.module == false) then + if not (plugin._.loaded or plugin.module == false or plugin.virtual) then if norm == M.normname(plugin.name) then table.insert(rtp, 1, plugin.dir) else diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 5921169..0dbba9a 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -60,6 +60,7 @@ ---@field priority? number Only useful for lazy=false plugins to force loading certain plugins first. Default priority is 50 ---@field dev? boolean If set, then link to the respective folder under your ~/projects ---@field rocks? string[] +---@field virtual? boolean virtual plugins won't be installed or added to the rtp. ---@class LazyPlugin: LazyPluginBase,LazyPluginHandlers,LazyPluginHooks,LazyPluginRef ---@field dependencies? string[] From b08dba8107b5bdaaa007f18cf6c0cc0e0fd576aa Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 7 Dec 2024 07:57:03 +0100 Subject: [PATCH 791/815] fix(render): show correct key for home. Fixes #1796 --- lua/lazy/view/render.lua | 2 -- 1 file changed, 2 deletions(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index e1eec6c..16c6659 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -144,8 +144,6 @@ function M:title() if mode.name == "home" then if self.view.state.mode == "home" then title = " lazy.nvim " .. Config.options.ui.icons.lazy - else - title = " lazy.nvim (H) " end end From 656cf4309396b7b8b62984e923bf8d8a0013f7d7 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 7 Dec 2024 11:52:43 +0100 Subject: [PATCH 792/815] fix(plugin): don't check if dir exists for virtual plugins --- lua/lazy/manage/task/plugin.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/manage/task/plugin.lua b/lua/lazy/manage/task/plugin.lua index 841cc6c..cec9762 100644 --- a/lua/lazy/manage/task/plugin.lua +++ b/lua/lazy/manage/task/plugin.lua @@ -99,7 +99,7 @@ M.docs = { M.exists = { skip = function(plugin) - return not plugin._.is_local + return not plugin._.is_local or plugin.virtual end, run = function(self) if not Util.file_exists(self.plugin.dir) then From 014d1d6d78df4e58f962158e6e00261d8632612c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 7 Dec 2024 21:44:18 +0100 Subject: [PATCH 793/815] chore(main): release 11.16.0 (#1838) :robot: I have created a release *beep* *boop* --- ## [11.16.0](https://github.com/folke/lazy.nvim/compare/v11.15.0...v11.16.0) (2024-12-07) ### Features * **plugin:** added support for virtual plugins. Closes [#1836](https://github.com/folke/lazy.nvim/issues/1836) ([ee64abc](https://github.com/folke/lazy.nvim/commit/ee64abc76be2b237b95d241a924b0323005b868a)) ### Bug Fixes * **plugin:** don't check if dir exists for virtual plugins ([656cf43](https://github.com/folke/lazy.nvim/commit/656cf4309396b7b8b62984e923bf8d8a0013f7d7)) * **render:** show correct key for home. Fixes [#1796](https://github.com/folke/lazy.nvim/issues/1796) ([b08dba8](https://github.com/folke/lazy.nvim/commit/b08dba8107b5bdaaa007f18cf6c0cc0e0fd576aa)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 13 +++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 23b0e13..228572b 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.15.0" + ".": "11.16.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ec2c9c..009055b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [11.16.0](https://github.com/folke/lazy.nvim/compare/v11.15.0...v11.16.0) (2024-12-07) + + +### Features + +* **plugin:** added support for virtual plugins. Closes [#1836](https://github.com/folke/lazy.nvim/issues/1836) ([ee64abc](https://github.com/folke/lazy.nvim/commit/ee64abc76be2b237b95d241a924b0323005b868a)) + + +### Bug Fixes + +* **plugin:** don't check if dir exists for virtual plugins ([656cf43](https://github.com/folke/lazy.nvim/commit/656cf4309396b7b8b62984e923bf8d8a0013f7d7)) +* **render:** show correct key for home. Fixes [#1796](https://github.com/folke/lazy.nvim/issues/1796) ([b08dba8](https://github.com/folke/lazy.nvim/commit/b08dba8107b5bdaaa007f18cf6c0cc0e0fd576aa)) + ## [11.15.0](https://github.com/folke/lazy.nvim/compare/v11.14.2...v11.15.0) (2024-12-05) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 3b32f5c..9a49aaa 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -241,7 +241,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.15.0" -- x-release-please-version +M.version = "11.16.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 703be1dda35e142e76e94e7503cf67d6b98a1d35 Mon Sep 17 00:00:00 2001 From: Daemon Date: Mon, 9 Dec 2024 13:40:21 -0800 Subject: [PATCH 794/815] fix(types): ensure all fields for `LazyPluginSpec` are optional (#1843) > After updating lua_ls to [v3.13.3](https://github.com/LuaLS/lua-language-server/releases/tag/3.13.3) noticed my plugin scripts using `@type LazyPluginSpec` now have `missing-fields` warnings. It seems they have changed how `missing-fields` diagnostics work with inherited types: https://github.com/LuaLS/lua-language-server/commit/7b2d58537fea87d1fefec894ac17b3bd73681e63. Duplicate offending fields as optional in type `LazyPluginSpec` Closes: #1842 --- lua/lazy/types.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 0dbba9a..6e406bb 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -75,6 +75,8 @@ ---@field module? false ---@class LazyPluginSpec: LazyPluginBase,LazyPluginSpecHandlers,LazyPluginHooks,LazyPluginRef +---@field name? string display name and name used for plugin config files +---@field dir? string ---@field dependencies? string|string[]|LazyPluginSpec[] ---@field specs? string|string[]|LazyPluginSpec[] From b97ee167f594c69656f985f919a00435a7bc7045 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 10 Dec 2024 05:18:15 +0000 Subject: [PATCH 795/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 7722a40..68bbee4 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -540,9 +540,7 @@ function. keys = { { "ft", "Neotree toggle", desc = "NeoTree" }, }, - config = function() - require("neo-tree").setup() - end, + opts = {}, } < From 7c493713bc2cb392706866eeba53aaef6c8e9fc6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 20:12:21 +0100 Subject: [PATCH 796/815] chore(main): release 11.16.1 (#1844) :robot: I have created a release *beep* *boop* --- ## [11.16.1](https://github.com/folke/lazy.nvim/compare/v11.16.0...v11.16.1) (2024-12-09) ### Bug Fixes * **types:** ensure all fields for `LazyPluginSpec` are optional ([#1843](https://github.com/folke/lazy.nvim/issues/1843)) ([703be1d](https://github.com/folke/lazy.nvim/commit/703be1dda35e142e76e94e7503cf67d6b98a1d35)), closes [#1842](https://github.com/folke/lazy.nvim/issues/1842) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 228572b..b82a64f 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.16.0" + ".": "11.16.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 009055b..f65347f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.16.1](https://github.com/folke/lazy.nvim/compare/v11.16.0...v11.16.1) (2024-12-09) + + +### Bug Fixes + +* **types:** ensure all fields for `LazyPluginSpec` are optional ([#1843](https://github.com/folke/lazy.nvim/issues/1843)) ([703be1d](https://github.com/folke/lazy.nvim/commit/703be1dda35e142e76e94e7503cf67d6b98a1d35)), closes [#1842](https://github.com/folke/lazy.nvim/issues/1842) + ## [11.16.0](https://github.com/folke/lazy.nvim/compare/v11.15.0...v11.16.0) (2024-12-07) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9a49aaa..335b664 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -241,7 +241,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.16.0" -- x-release-please-version +M.version = "11.16.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 805b85c2ea3bd6f9506ef22cbd6e3a39172b5b08 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 13 Dec 2024 19:56:52 +0100 Subject: [PATCH 797/815] fix(meta): when a plugin is both optional and disabled, then just delete it from the list --- lua/lazy/core/meta.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index abb2508..88263a2 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -305,7 +305,11 @@ function M:fix_disabled() for _, plugin in pairs(self.plugins) do if plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled()) then changes = changes + 1 - self:disable(plugin) + if plugin.optional then + self:del(plugin.name) + else + self:disable(plugin) + end end end self:rebuild() From 7e6c863bc7563efbdd757a310d17ebc95166cef3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 19:58:17 +0100 Subject: [PATCH 798/815] chore(main): release 11.16.2 (#1854) :robot: I have created a release *beep* *boop* --- ## [11.16.2](https://github.com/folke/lazy.nvim/compare/v11.16.1...v11.16.2) (2024-12-13) ### Bug Fixes * **meta:** when a plugin is both optional and disabled, then just delete it from the list ([805b85c](https://github.com/folke/lazy.nvim/commit/805b85c2ea3bd6f9506ef22cbd6e3a39172b5b08)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 7 +++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index b82a64f..d5dbcb3 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.16.1" + ".": "11.16.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index f65347f..015288e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [11.16.2](https://github.com/folke/lazy.nvim/compare/v11.16.1...v11.16.2) (2024-12-13) + + +### Bug Fixes + +* **meta:** when a plugin is both optional and disabled, then just delete it from the list ([805b85c](https://github.com/folke/lazy.nvim/commit/805b85c2ea3bd6f9506ef22cbd6e3a39172b5b08)) + ## [11.16.1](https://github.com/folke/lazy.nvim/compare/v11.16.0...v11.16.1) (2024-12-09) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 335b664..2ae4079 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -241,7 +241,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.16.1" -- x-release-please-version +M.version = "11.16.2" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From a9c660d6ef1b396869d3d951760aa7a3dbfe575f Mon Sep 17 00:00:00 2001 From: Shihua Zeng <76579810+Bekaboo@users.noreply.github.com> Date: Sat, 4 Jan 2025 22:40:44 -0700 Subject: [PATCH 799/815] feat(config,render): allow customizing the debug icon (#1863) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description lazy.nvim allows users to configure all icons except for the debug icon. This PR enables user to configure the debug icon with `ui.icons.debug` ## Screenshots Before: ![image](https://github.com/user-attachments/assets/42b02fd9-58e6-4ebc-a1a7-c5e91f07a11a) After (with config `{ ui = { icons = { debug = ' ' } } }`): ![image](https://github.com/user-attachments/assets/3ade5392-a988-4a10-86fc-f52b41a690c5) --- lua/lazy/core/config.lua | 1 + lua/lazy/view/render.lua | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 2ae4079..9939763 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -96,6 +96,7 @@ M.defaults = { icons = { cmd = " ", config = "", + debug = "●", event = " ", favorite = " ", ft = " ", diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 16c6659..8c49a1b 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -759,7 +759,7 @@ function M:debug() ---@type string[] plugins = vim.tbl_values(plugins) table.sort(plugins) - self:append("● ", "LazySpecial", { indent = 2 }) + self:append(Config.options.ui.icons.debug, "LazySpecial", { indent = 2 }) if handler_type == "keys" then for k, v in pairs(Config.plugins[plugins[1]]._.handlers.keys) do if k == value then From 72aa3a2624be5dc240646084f7b6a38eb99eb2ce Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 5 Jan 2025 05:41:31 +0000 Subject: [PATCH 800/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 68bbee4..6870e89 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -706,6 +706,7 @@ will be added to the plugin’s spec. icons = { cmd = " ", config = "", + debug = "●", event = " ", favorite = " ", ft = " ", From 4df5c4d65a3bbf801edd9ec55fb1ae55cfa72dd0 Mon Sep 17 00:00:00 2001 From: Eduardo Bray Date: Mon, 6 Jan 2025 17:14:06 -0300 Subject: [PATCH 801/815] fix(config): add missing space on the default debug icon (#1879) ## Description Adds the missing space from a9c660d ## Screenshots Current: ![imagen](https://github.com/user-attachments/assets/9a3a1a0c-43ad-49f3-8b39-b3250f53ec40) After: ![imagen](https://github.com/user-attachments/assets/3b3d4dfd-3c03-4db9-8f61-d2bd4f9ed22d) --- lua/lazy/core/config.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 9939763..49339e5 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -96,7 +96,7 @@ M.defaults = { icons = { cmd = " ", config = "", - debug = "●", + debug = "● ", event = " ", favorite = " ", ft = " ", From d8f26efd456190241afd1b0f5235fe6fdba13d4a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 6 Jan 2025 20:14:50 +0000 Subject: [PATCH 802/815] chore(build): auto-generate docs --- doc/lazy.nvim.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lazy.nvim.txt b/doc/lazy.nvim.txt index 6870e89..2ae3b36 100644 --- a/doc/lazy.nvim.txt +++ b/doc/lazy.nvim.txt @@ -706,7 +706,7 @@ will be added to the plugin’s spec. icons = { cmd = " ", config = "", - debug = "●", + debug = "● ", event = " ", favorite = " ", ft = " ", From 4f30c61b64d3fb8a04fd6660989b09241aa1b127 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 30 Jan 2025 20:13:53 +0100 Subject: [PATCH 803/815] ci: check --- lua/lazy/core/meta.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 88263a2..58397fd 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -14,6 +14,9 @@ local Util = require("lazy.core.util") ---@field pkgs table local M = {} +if false then + dd("foo") +end ---@param spec LazySpecLoader ---@return LazyMeta function M.new(spec) From 5586fda88de57b33b723f75d5327b36165663077 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Thu, 30 Jan 2025 20:14:57 +0100 Subject: [PATCH 804/815] ci: remove debug --- lua/lazy/core/meta.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 58397fd..88263a2 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -14,9 +14,6 @@ local Util = require("lazy.core.util") ---@field pkgs table local M = {} -if false then - dd("foo") -end ---@param spec LazySpecLoader ---@return LazyMeta function M.new(spec) From 7527af40ddd4a93a02911be570b32609b9d4ea53 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 30 Jan 2025 19:19:03 +0000 Subject: [PATCH 805/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 504 +++++++++++++++++------------- 1 file changed, 292 insertions(+), 212 deletions(-) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index 6cfdb3f..d3ba8f6 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -10,11 +10,11 @@ return }, { name = "adopure.nvim", url = "Willem-J-an/adopure.nvim", - version = "1.2.0-1" + version = "2.1.0-1" }, { name = "aerial.nvim", url = "stevearc/aerial.nvim", - version = "2.3.1-1" + version = "2.4.0-1" }, { name = "age.nvim", url = "KingMichaelPark/age.nvim", @@ -22,7 +22,7 @@ return }, { name = "ai.nvim", url = "S1M0N38/ai.nvim", - version = "1.3.0-1" + version = "1.5.0-1" }, { name = "astral.nvim", url = "rootiest/astral.nvim", @@ -35,10 +35,14 @@ return name = "autosave.nvim", url = "brianhuster/autosave.nvim", version = "0.4.2-1" + }, { + name = "avante.nvim", + url = "yetone/avante.nvim", + version = "0.0.15-1" }, { name = "banana.nvim", url = "CWood-sdf/banana.nvim", - version = "0.1.0-1" + version = "0.2.0-1" }, { name = "bars-n-lines.nvim", url = "OXY2DEV/bars-N-lines.nvim", @@ -54,7 +58,7 @@ return }, { name = "bufferline.nvim", url = "akinsho/bufferline.nvim", - version = "4.9.0-1" + version = "4.9.1-1" }, { name = "care.nvim", url = "max397574/care.nvim", @@ -62,7 +66,11 @@ return }, { name = "ccc.nvim", url = "uga-rosa/ccc.nvim", - version = "1.6.0-1" + version = "2.0.3-1" + }, { + name = "chatml.nvim", + url = "S1M0N38/chatml.nvim", + version = "1.0.0-1" }, { name = "ci-template.nvim", url = "linrongbin16/ci-template.nvim", @@ -74,7 +82,7 @@ return }, { name = "cmp-rg", url = "lukas-reineke/cmp-rg", - version = "1.3.9-1" + version = "1.3.11-1" }, { name = "colorbox.nvim", url = "linrongbin16/colorbox.nvim", @@ -86,7 +94,7 @@ return }, { name = "colortils.nvim", url = "nvim-colortils/colortils.nvim", - version = "1.1.0-1" + version = "1.2.0-1" }, { name = "command.nvim", url = "cultab/command.nvim", @@ -106,11 +114,23 @@ return }, { name = "commons.nvim", url = "linrongbin16/commons.nvim", - version = "21.1.0-1" + version = "26.0.0-1" }, { name = "conform.nvim", url = "stevearc/conform.nvim", - version = "8.2.0-1" + version = "8.4.0-1" + }, { + name = "coop.nvim", + url = "gregorias/coop.nvim", + version = "1.0.1-0" + }, { + name = "copy-diagnostics.nvim", + url = "NickStafford2/copy-diagnostics.nvim", + version = "main-1" + }, { + name = "cord.nvim", + url = "vyfor/cord.nvim", + version = "2.0.0beta-9" }, { name = "cursor-text-objects.nvim", url = "ColinKennedy/cursor-text-objects.nvim", @@ -122,7 +142,7 @@ return }, { name = "dante.nvim", url = "S1M0N38/dante.nvim", - version = "1.2.0-1" + version = "1.3.1-1" }, { name = "daylight.nvim", url = "NTBBloodbath/daylight.nvim", @@ -159,18 +179,26 @@ return name = "donut.nvim", url = "NStefan002/donut.nvim", version = "2.2.1-1" + }, { + name = "donutlify.nvim", + url = "NStefan002/donutlify.nvim", + version = "1.0.0-1" }, { name = "doris.nvim", url = "jackokring/doris.nvim", version = "0.3.2-1" + }, { + name = "down.nvim", + url = "clpi/down.nvim", + version = "master-1" }, { name = "dressing.nvim", url = "stevearc/dressing.nvim", - version = "3.1.0-1" + version = "3.1.1-1" }, { name = "dropbar.nvim", url = "Bekaboo/dropbar.nvim", - version = "9.0.2-1" + version = "11.0.0-1" }, { name = "duck.nvim", url = "tamton-aquib/duck.nvim", @@ -186,23 +214,23 @@ return }, { name = "efmls-configs-nvim", url = "creativenull/efmls-configs-nvim", - version = "1.8.0-1" + version = "1.9.0-1" }, { name = "elixir-tools.nvim", url = "elixir-tools/elixir-tools.nvim", - version = "0.16.1-1" + version = "0.17.0-1" }, { name = "fake.nvim", url = "Kibadda/fake.nvim", - version = "1.0.0-1" + version = "4.0.1-1" }, { name = "feed.nvim", url = "neo451/feed.nvim", - version = "1.12.0-1" + version = "1.16.4-1" }, { name = "feline.nvim", url = "freddiehaddad/feline.nvim", - version = "1.7.0-1" + version = "1.7.1-1" }, { name = "fidget.nvim", url = "j-hui/fidget.nvim", @@ -242,7 +270,7 @@ return }, { name = "fzfx.nvim", url = "linrongbin16/fzfx.nvim", - version = "7.0.0-1" + version = "8.0.0-1" }, { name = "galileo.nvim", url = "S1M0N38/galileo.nvim", @@ -262,11 +290,11 @@ return }, { name = "github-nvim-theme", url = "projekt0n/github-nvim-theme", - version = "1.0.2-1" + version = "1.1.2-1" }, { name = "gitlinker.nvim", url = "linrongbin16/gitlinker.nvim", - version = "5.0.0-1" + version = "5.0.1-1" }, { name = "gitsigns.nvim", url = "lewis6991/gitsigns.nvim", @@ -294,7 +322,7 @@ return }, { name = "guard.nvim", url = "nvimdev/guard.nvim", - version = "1.0.4-1" + version = "2.1.2-1" }, { name = "hardhat.nvim", url = "TheSnakeWitcher/hardhat.nvim", @@ -306,11 +334,11 @@ return }, { name = "haskell-tools.nvim", url = "mrcjkb/haskell-tools.nvim", - version = "4.3.2-1" + version = "4.4.0-1" }, { name = "headlines.nvim", url = "lukas-reineke/headlines.nvim", - version = "4.0.2-1" + version = "5.0.0-1" }, { name = "heirline.nvim", url = "rebelot/heirline.nvim", @@ -326,7 +354,7 @@ return }, { name = "hlchunk.nvim", url = "shellRaining/hlchunk.nvim", - version = "1.1.0-1" + version = "1.3.0-1" }, { name = "hotpot.nvim", url = "rktjmp/hotpot.nvim", @@ -334,7 +362,7 @@ return }, { name = "hurl.nvim", url = "jellydn/hurl.nvim", - version = "2.0.0-1" + version = "2.0.1-1" }, { name = "hydra.nvim", url = "nvimtools/hydra.nvim", @@ -346,11 +374,11 @@ return }, { name = "incline.nvim", url = "b0o/incline.nvim", - version = "0.0.1-1" + version = "0.0.3-1" }, { name = "indent-blankline.nvim", url = "lukas-reineke/indent-blankline.nvim", - version = "3.8.6-1" + version = "3.8.7-1" }, { name = "kai.nvim", url = "Kamilcuk/kai.nvim", @@ -366,7 +394,7 @@ return }, { name = "lazy.nvim", url = "folke/lazy.nvim", - version = "11.14.2-1" + version = "11.16.2-1" }, { name = "lazydev.nvim", url = "folke/lazydev.nvim", @@ -374,15 +402,15 @@ return }, { name = "lean.nvim", url = "Julian/lean.nvim", - version = "2024.10.1-1" + version = "2024.12.2-1" }, { name = "leetcode.nvim", url = "kawre/leetcode.nvim", - version = "0.2.0-1" + version = "0.3.0-1" }, { name = "legendary.nvim", url = "mrjones2014/legendary.nvim", - version = "2.13.11-1" + version = "2.13.13-1" }, { name = "live-command.nvim", url = "smjonas/live-command.nvim", @@ -390,7 +418,7 @@ return }, { name = "live-preview.nvim", url = "brianhuster/live-preview.nvim", - version = "0.8.3-1" + version = "0.9.4-1" }, { name = "logging.nvim", url = "NTBBloodbath/logging.nvim", @@ -422,7 +450,7 @@ return }, { name = "lua-console.nvim", url = "YaroSpace/lua-console.nvim", - version = "1.1.0-1" + version = "1.2.3-1" }, { name = "lua-obfuscator.nvim", url = "git+ssh://git@github.com/kdssoftware/lua-obfuscator.nvim.git", @@ -442,7 +470,7 @@ return }, { name = "luarocks-build-treesitter-parser", url = "nvim-neorocks/luarocks-build-treesitter-parser", - version = "5.0.2-1" + version = "6.0.0-1" }, { name = "luarocks-build-treesitter-parser-cpp", url = "nvim-neorocks/luarocks-build-treesitter-parser-cpp", @@ -450,7 +478,7 @@ return }, { name = "mag-nvim-lsp", url = "iguanacucumber/mag-nvim-lsp", - version = "0.1-1" + version = "0.2-1" }, { name = "mag-nvim-lua", url = "iguanacucumber/mag-nvim-lua", @@ -458,19 +486,15 @@ return }, { name = "magazine.nvim", url = "iguanacucumber/magazine.nvim", - version = "0.4.1-1" + version = "0.4.4-1" }, { name = "mapx.nvim", url = "b0o/mapx.nvim", version = "0.2.1-1" - }, { - name = "markdown.nvim", - url = "MeanderingProgrammer/render-markdown.nvim", - version = "5.0.1-1" }, { name = "markview.nvim", url = "OXY2DEV/markview.nvim", - version = "24.0.0-1" + version = "25.1.0-1" }, { name = "mason-lspconfig.nvim", url = "williamboman/mason-lspconfig.nvim", @@ -483,10 +507,14 @@ return name = "mason.nvim", url = "williamboman/mason.nvim", version = "1.10.0-1" + }, { + name = "melange-nvim", + url = "savq/melange-nvim", + version = "0.9.0-1" }, { name = "mini.nvim", url = "echasnovski/mini.nvim", - version = "0.9.0-1" + version = "0.15.0-1" }, { name = "mkdnflow.nvim", url = "jakewvincent/mkdnflow.nvim", @@ -510,11 +538,11 @@ return }, { name = "neo-tree.nvim", url = "nvim-neo-tree/neo-tree.nvim", - version = "3.26-1" + version = "3.29-1" }, { name = "neoconf.nvim", url = "folke/neoconf.nvim", - version = "1.3.3-1" + version = "1.4.0-1" }, { name = "neodev.nvim", url = "folke/neodev.nvim", @@ -522,15 +550,19 @@ return }, { name = "neogen", url = "danymat/neogen", - version = "2.19.4-1" + version = "2.20.0-1" }, { name = "neogit", url = "NeogitOrg/neogit", - version = "1.0.0-1" + version = "2.0.0-1" }, { name = "neorg", url = "nvim-neorg/neorg", - version = "9.1.1-1" + version = "9.2.0-1" + }, { + name = "neorg-archive", + url = "bottd/neorg-archive", + version = "1.0.0-1" }, { name = "neorg-conceal-wrap", url = "benlubas/neorg-conceal-wrap", @@ -538,7 +570,11 @@ return }, { name = "neorg-interim-ls", url = "benlubas/neorg-interim-ls", - version = "1.3.0-1" + version = "2.1.0-1" + }, { + name = "neorg-query", + url = "benlubas/neorg-query", + version = "1.2.0-1" }, { name = "neorg-se", url = "benlubas/neorg-se", @@ -558,19 +594,23 @@ return }, { name = "neotest", url = "nvim-neotest/neotest", - version = "5.6.1-1" + version = "5.8.0-1" }, { name = "neotest-busted", url = "MisanthropicBit/neotest-busted", - version = "0.3.0-1" + version = "0.5.0-1" + }, { + name = "neotest-dotnet", + url = "Issafalcon/neotest-dotnet", + version = "stable-1" }, { name = "neotest-golang", url = "fredrikaverpil/neotest-golang", - version = "1.5.0-1" + version = "1.9.1-1" }, { name = "neotest-haskell", url = "mrcjkb/neotest-haskell", - version = "2.1.0-1" + version = "2.1.1-1" }, { name = "neotest-java", url = "rcasia/neotest-java", @@ -579,6 +619,10 @@ return name = "neotest-zig", url = "lawrence-laz/neotest-zig", version = "1.3.1-1" + }, { + name = "nerdy.nvim", + url = "2KAbhishek/nerdy.nvim", + version = "1.4-1" }, { name = "netman.nvim", url = "miversen33/netman.nvim", @@ -590,11 +634,11 @@ return }, { name = "no-neck-pain.nvim", url = "shortcuts/no-neck-pain.nvim", - version = "2.1.3-1" + version = "2.1.5-1" }, { name = "noice.nvim", url = "folke/noice.nvim", - version = "4.7.2-1" + version = "4.9.0-1" }, { name = "npackages.nvim", url = "diegofigs/npackages.nvim", @@ -610,11 +654,11 @@ return }, { name = "nvim-a2-pack", url = "dfgordon/nvim-a2-pack", - version = "0.3.0-1" + version = "0.3.1-1" }, { name = "nvim-best-practices-plugin-template", url = "ColinKennedy/nvim-best-practices-plugin-template", - version = "1.4.0-1" + version = "1.6.0-1" }, { name = "nvim-bqf", url = "kevinhwang91/nvim-bqf", @@ -634,7 +678,7 @@ return }, { name = "nvim-dap", url = "mfussenegger/nvim-dap", - version = "0.8.0-1" + version = "0.9.0-1" }, { name = "nvim-dap-ui", url = "rcarriga/nvim-dap-ui", @@ -647,6 +691,10 @@ return name = "nvim-dev-container", url = "esensar/nvim-dev-container", version = "0.2.0-1" + }, { + name = "nvim-faker", + url = "git+ssh://git@github.com/tehdb/nvim-faker.git", + version = "1.0.0-1" }, { name = "nvim-java", url = "nvim-java/nvim-java", @@ -678,7 +726,7 @@ return }, { name = "nvim-lspconfig", url = "neovim/nvim-lspconfig", - version = "1.0.0-1" + version = "1.6.0-1" }, { name = "nvim-metals", url = "scalameta/nvim-metals", @@ -686,11 +734,11 @@ return }, { name = "nvim-nio", url = "nvim-neotest/nvim-nio", - version = "1.10.0-1" + version = "1.10.1-1" }, { name = "nvim-notify", url = "rcarriga/nvim-notify", - version = "3.14.0-1" + version = "3.15.0-1" }, { name = "nvim-parinfer", url = "gpanders/nvim-parinfer", @@ -702,7 +750,7 @@ return }, { name = "nvim-possession", url = "gennaro-tedesco/nvim-possession", - version = "0.0.15-1" + version = "0.0.17-1" }, { name = "nvim-scrollview", url = "dstein64/nvim-scrollview", @@ -710,7 +758,7 @@ return }, { name = "nvim-smuggler", url = "Klafyvel/nvim-smuggler", - version = "0.4.2-1" + version = "0.5.0-1" }, { name = "nvim-snippets", url = "garymjr/nvim-snippets", @@ -723,6 +771,10 @@ return name = "nvim-surround", url = "kylechui/nvim-surround", version = "2.1.5-1" + }, { + name = "nvim-telescope-cycler", + url = "heindsight/nvim-telescope-cycler", + version = "0.1.0-1" }, { name = "nvim-tree.lua", url = "nvim-tree/nvim-tree.lua", @@ -742,7 +794,11 @@ return }, { name = "nvim-window-picker", url = "s1n7ax/nvim-window-picker", - version = "2.0.3-1" + version = "2.3.1-1" + }, { + name = "obazel.nvim", + url = "glindstedt/obazel.nvim", + version = "0.1.1-1" }, { name = "obsidian.nvim", url = "epwalsh/obsidian.nvim", @@ -750,11 +806,11 @@ return }, { name = "oil.nvim", url = "stevearc/oil.nvim", - version = "2.13.0-1" + version = "2.14.0-1" }, { name = "onedarkpro.nvim", url = "olimorris/onedarkpro.nvim", - version = "2.3.0-1" + version = "2.8.0-1" }, { name = "onenord.nvim", url = "rmehri01/onenord.nvim", @@ -762,7 +818,7 @@ return }, { name = "otter.nvim", url = "jmbuhr/otter.nvim", - version = "2.5.0-1" + version = "2.6.0-1" }, { name = "overseer.nvim", url = "stevearc/overseer.nvim", @@ -770,7 +826,7 @@ return }, { name = "oz.nvim", url = "luxluth/oz.nvim", - version = "0.0.3-1" + version = "0.0.4-1" }, { name = "package-info.nvim", url = "vuki656/package-info.nvim", @@ -794,7 +850,7 @@ return }, { name = "persisted.nvim", url = "olimorris/persisted.nvim", - version = "2.0.1-1" + version = "2.0.2-1" }, { name = "persistence.nvim", url = "folke/persistence.nvim", @@ -818,11 +874,11 @@ return }, { name = "quicker.nvim", url = "stevearc/quicker.nvim", - version = "1.2.0-1" + version = "1.3.0-1" }, { name = "rainbow-delimiters.nvim", url = "HiPhish/rainbow-delimiters.nvim", - version = "0.7.0-1" + version = "0.8.0-1" }, { name = "remember.nvim", url = "vladdoster/remember.nvim", @@ -834,11 +890,11 @@ return }, { name = "render-markdown.nvim", url = "MeanderingProgrammer/render-markdown.nvim", - version = "7.6.0-1" + version = "7.8.0-1" }, { name = "rest.nvim", url = "rest-nvim/rest.nvim", - version = "3.8.4-1" + version = "3.9.1-1" }, { name = "rime.nvim", url = "Freed-Wu/rime.nvim", @@ -854,19 +910,19 @@ return }, { name = "rocks-git.nvim", url = "nvim-neorocks/rocks-git.nvim", - version = "2.5.1-1" + version = "2.5.2-1" }, { name = "rocks-lazy.nvim", url = "nvim-neorocks/rocks-lazy.nvim", - version = "1.1.1-1" + version = "1.1.2-1" }, { name = "rocks-treesitter.nvim", url = "nvim-neorocks/rocks-treesitter.nvim", - version = "1.2.0-1" + version = "1.3.0-1" }, { name = "rocks.nvim", url = "nvim-neorocks/rocks.nvim", - version = "2.42.2-1" + version = "2.43.0-1" }, { name = "rtp.nvim", url = "nvim-neorocks/rtp.nvim", @@ -878,7 +934,7 @@ return }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "5.17.1-1" + version = "5.24.2-1" }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", @@ -886,7 +942,7 @@ return }, { name = "screenkey.nvim", url = "NStefan002/screenkey.nvim", - version = "2.2.1-1" + version = "2.4.2-1" }, { name = "scrollbar.nvim", url = "Xuyuanp/scrollbar.nvim", @@ -906,11 +962,11 @@ return }, { name = "smart-splits.nvim", url = "mrjones2014/smart-splits.nvim", - version = "1.7.0-1" + version = "1.8.1-1" }, { name = "snacks.nvim", url = "folke/snacks.nvim", - version = "2.6.0-1" + version = "2.15.0-1" }, { name = "sos.nvim", url = "tmillr/sos.nvim", @@ -946,7 +1002,7 @@ return }, { name = "tabby.nvim", url = "nanozuki/tabby.nvim", - version = "2.5.1-1" + version = "2.7.4-1" }, { name = "tangerine.nvim", url = "udayvir-singh/tangerine.nvim", @@ -955,6 +1011,14 @@ return name = "teacup.neovim", url = "Clivern/teacup.neovim", version = "0.0.1-1" + }, { + name = "telescope-cmdline.nvim", + url = "jonarrien/telescope-cmdline.nvim", + version = "0.2.1-1" + }, { + name = "telescope-frecency.nvim", + url = "nvim-telescope/telescope-frecency.nvim", + version = "1.0.5-1" }, { name = "telescope-zf-native.nvim", url = "natecraddock/telescope-zf-native.nvim", @@ -970,11 +1034,11 @@ return }, { name = "toggleterm.nvim", url = "akinsho/toggleterm.nvim", - version = "2.13.0-1" + version = "2.13.1-1" }, { name = "tokyonight.nvim", url = "folke/tokyonight.nvim", - version = "4.10.0-1" + version = "4.11.0-1" }, { name = "tree-sitter-ada", url = "briot/tree-sitter-ada", @@ -990,7 +1054,7 @@ return }, { name = "tree-sitter-apex", url = "aheber/tree-sitter-sfapex", - version = "0.0.39-1" + version = "0.0.45-1" }, { name = "tree-sitter-arduino", url = "tree-sitter-grammars/tree-sitter-arduino", @@ -1002,7 +1066,7 @@ return }, { name = "tree-sitter-astro", url = "virchau13/tree-sitter-astro", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-authzed", url = "mleonidas/tree-sitter-authzed", @@ -1010,11 +1074,11 @@ return }, { name = "tree-sitter-awk", url = "Beaglefoot/tree-sitter-awk", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-bash", url = "tree-sitter/tree-sitter-bash", - version = "0.0.36-1" + version = "0.0.39-1" }, { name = "tree-sitter-bass", url = "vito/tree-sitter-bass", @@ -1030,7 +1094,7 @@ return }, { name = "tree-sitter-bicep", url = "tree-sitter-grammars/tree-sitter-bicep", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-bitbake", url = "tree-sitter-grammars/tree-sitter-bitbake", @@ -1042,15 +1106,15 @@ return }, { name = "tree-sitter-bp", url = "ambroisie/tree-sitter-bp", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-c", url = "tree-sitter/tree-sitter-c", - version = "0.0.34-1" + version = "0.0.38-1" }, { name = "tree-sitter-c_sharp", url = "tree-sitter/tree-sitter-c-sharp", - version = "0.0.34-1" + version = "0.0.38-1" }, { name = "tree-sitter-cairo", url = "tree-sitter-grammars/tree-sitter-cairo", @@ -1063,10 +1127,14 @@ return name = "tree-sitter-chatito", url = "tree-sitter-grammars/tree-sitter-chatito", version = "0.0.30-1" + }, { + name = "tree-sitter-circom", + url = "Decurity/tree-sitter-circom", + version = "0.0.1-1" }, { name = "tree-sitter-cli", url = "FourierTransformer/tree-sitter-cli", - version = "0.24.4-1" + version = "0.24.5-1" }, { name = "tree-sitter-clojure", url = "sogaiu/tree-sitter-clojure", @@ -1098,11 +1166,11 @@ return }, { name = "tree-sitter-cpp", url = "tree-sitter/tree-sitter-cpp", - version = "0.0.35-1" + version = "0.0.39-1" }, { name = "tree-sitter-css", url = "tree-sitter/tree-sitter-css", - version = "0.0.31-1" + version = "0.0.35-1" }, { name = "tree-sitter-csv", url = "tree-sitter-grammars/tree-sitter-csv", @@ -1110,7 +1178,7 @@ return }, { name = "tree-sitter-cuda", url = "tree-sitter-grammars/tree-sitter-cuda", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-cue", url = "eonpatapon/tree-sitter-cue", @@ -1142,7 +1210,7 @@ return }, { name = "tree-sitter-diff", url = "the-mikedavis/tree-sitter-diff", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-disassembly", url = "ColinKennedy/tree-sitter-disassembly", @@ -1150,11 +1218,11 @@ return }, { name = "tree-sitter-djot", url = "treeman/tree-sitter-djot", - version = "0.0.29-1" + version = "0.0.33-1" }, { name = "tree-sitter-dockerfile", url = "camdencheek/tree-sitter-dockerfile", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-dot", url = "rydesun/tree-sitter-dot", @@ -1170,7 +1238,7 @@ return }, { name = "tree-sitter-earthfile", url = "glehmann/tree-sitter-earthfile", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-ebnf", url = "RubixDev/ebnf", @@ -1182,7 +1250,7 @@ return }, { name = "tree-sitter-editorconfig", url = "ValdezFOmar/tree-sitter-editorconfig", - version = "0.0.44-1" + version = "0.0.47-1" }, { name = "tree-sitter-eds", url = "uyha/tree-sitter-eds", @@ -1194,11 +1262,11 @@ return }, { name = "tree-sitter-elixir", url = "elixir-lang/tree-sitter-elixir", - version = "0.0.35-1" + version = "0.0.38-1" }, { name = "tree-sitter-elm", url = "elm-tooling/tree-sitter-elm", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-elsa", url = "glapa-grossklag/tree-sitter-elsa", @@ -1210,15 +1278,15 @@ return }, { name = "tree-sitter-embedded_template", url = "tree-sitter/tree-sitter-embedded-template", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-erlang", url = "WhatsApp/tree-sitter-erlang", - version = "0.0.33-1" + version = "0.0.36-1" }, { name = "tree-sitter-facility", url = "FacilityApi/tree-sitter-facility", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-faust", url = "khiner/tree-sitter-faust", @@ -1238,7 +1306,7 @@ return }, { name = "tree-sitter-fish", url = "ram02z/tree-sitter-fish", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-foam", url = "FoamScience/tree-sitter-foam", @@ -1250,7 +1318,7 @@ return }, { name = "tree-sitter-fortran", url = "stadelmanma/tree-sitter-fortran", - version = "0.0.36-1" + version = "0.0.41-1" }, { name = "tree-sitter-fsh", url = "mgramigna/tree-sitter-fsh", @@ -1258,7 +1326,7 @@ return }, { name = "tree-sitter-fsharp", url = "ionide/tree-sitter-fsharp", - version = "0.0.9-1" + version = "0.0.10-1" }, { name = "tree-sitter-func", url = "tree-sitter-grammars/tree-sitter-func", @@ -1270,15 +1338,15 @@ return }, { name = "tree-sitter-gap", url = "gap-system/tree-sitter-gap", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-gaptst", url = "gap-system/tree-sitter-gaptst", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-gdscript", url = "PrestonKnopp/tree-sitter-gdscript", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-gdshader", url = "GodOfAvacyn/tree-sitter-gdshader", @@ -1330,11 +1398,11 @@ return }, { name = "tree-sitter-gnuplot", url = "dpezto/tree-sitter-gnuplot", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-go", url = "tree-sitter/tree-sitter-go", - version = "0.0.35-1" + version = "0.0.38-1" }, { name = "tree-sitter-goctl", url = "chaozwn/tree-sitter-goctl", @@ -1342,11 +1410,11 @@ return }, { name = "tree-sitter-godot_resource", url = "PrestonKnopp/tree-sitter-godot-resource", - version = "0.0.29-1" + version = "0.0.32-1" }, { name = "tree-sitter-gomod", url = "camdencheek/tree-sitter-go-mod", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-gosum", url = "tree-sitter-grammars/tree-sitter-go-sum", @@ -1354,7 +1422,7 @@ return }, { name = "tree-sitter-gotmpl", url = "ngalaiko/tree-sitter-go-template", - version = "0.0.30-1" + version = "0.0.35-1" }, { name = "tree-sitter-gowork", url = "omertuc/tree-sitter-go-work", @@ -1370,11 +1438,11 @@ return }, { name = "tree-sitter-gren", url = "MaeBrooks/tree-sitter-gren", - version = "0.0.3-1" + version = "0.0.6-1" }, { name = "tree-sitter-groovy", url = "murtaza64/tree-sitter-groovy", - version = "0.0.30-1" + version = "0.0.33-1" }, { name = "tree-sitter-gstlaunch", url = "tree-sitter-grammars/tree-sitter-gstlaunch", @@ -1382,7 +1450,7 @@ return }, { name = "tree-sitter-hack", url = "slackhq/tree-sitter-hack", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-hare", url = "tree-sitter-grammars/tree-sitter-hare", @@ -1402,11 +1470,11 @@ return }, { name = "tree-sitter-heex", url = "connorlay/tree-sitter-heex", - version = "0.0.30-1" + version = "0.0.34-1" }, { name = "tree-sitter-helm", url = "ngalaiko/tree-sitter-go-template", - version = "0.0.31-1" + version = "0.0.35-1" }, { name = "tree-sitter-hjson", url = "winston0410/tree-sitter-hjson", @@ -1426,11 +1494,11 @@ return }, { name = "tree-sitter-hoon", url = "urbit-pilled/tree-sitter-hoon", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-html", url = "tree-sitter/tree-sitter-html", - version = "0.0.33-1" + version = "0.0.35-1" }, { name = "tree-sitter-html_tags", url = "nvim-neorocks/luarocks-stub", @@ -1442,7 +1510,7 @@ return }, { name = "tree-sitter-http", url = "rest-nvim/tree-sitter-http", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-hurl", url = "pfeiferj/tree-sitter-hurl", @@ -1450,11 +1518,15 @@ return }, { name = "tree-sitter-hyprlang", url = "tree-sitter-grammars/tree-sitter-hyprlang", - version = "0.0.29-1" + version = "0.0.33-1" }, { name = "tree-sitter-idl", url = "cathaysia/tree-sitter-idl", version = "0.0.31-1" + }, { + name = "tree-sitter-idris", + url = "kayhide/tree-sitter-idris", + version = "0.0.1-1" }, { name = "tree-sitter-ini", url = "justinmk/tree-sitter-ini", @@ -1462,7 +1534,11 @@ return }, { name = "tree-sitter-inko", url = "inko-lang/tree-sitter-inko", - version = "0.0.36-1" + version = "0.0.38-1" + }, { + name = "tree-sitter-ipkg", + url = "srghma/tree-sitter-ipkg", + version = "0.0.1-1" }, { name = "tree-sitter-ispc", url = "tree-sitter-grammars/tree-sitter-ispc", @@ -1470,15 +1546,15 @@ return }, { name = "tree-sitter-janet_simple", url = "sogaiu/tree-sitter-janet-simple", - version = "0.0.29-1" + version = "0.0.32-1" }, { name = "tree-sitter-java", url = "tree-sitter/tree-sitter-java", - version = "0.0.35-1" + version = "0.0.39-1" }, { name = "tree-sitter-javascript", url = "tree-sitter/tree-sitter-javascript", - version = "0.0.33-1" + version = "0.0.35-1" }, { name = "tree-sitter-jq", url = "flurie/tree-sitter-jq", @@ -1486,11 +1562,11 @@ return }, { name = "tree-sitter-jsdoc", url = "tree-sitter/tree-sitter-jsdoc", - version = "0.0.33-1" + version = "0.0.35-1" }, { name = "tree-sitter-json", url = "tree-sitter/tree-sitter-json", - version = "0.0.33-1" + version = "0.0.35-1" }, { name = "tree-sitter-json5", url = "Joakker/tree-sitter-json5", @@ -1510,15 +1586,15 @@ return }, { name = "tree-sitter-julia", url = "tree-sitter/tree-sitter-julia", - version = "0.0.38-1" + version = "0.0.40-1" }, { name = "tree-sitter-just", url = "IndianBoy42/tree-sitter-just", - version = "0.0.34-1" + version = "0.0.36-1" }, { name = "tree-sitter-kconfig", url = "tree-sitter-grammars/tree-sitter-kconfig", - version = "0.0.29-1" + version = "0.0.32-1" }, { name = "tree-sitter-kdl", url = "tree-sitter-grammars/tree-sitter-kdl", @@ -1526,11 +1602,11 @@ return }, { name = "tree-sitter-kotlin", url = "fwcd/tree-sitter-kotlin", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-koto", url = "koto-lang/tree-sitter-koto", - version = "0.0.33-1" + version = "0.0.37-1" }, { name = "tree-sitter-kusto", url = "Willem-J-an/tree-sitter-kusto", @@ -1538,7 +1614,7 @@ return }, { name = "tree-sitter-lalrpop", url = "traxys/tree-sitter-lalrpop", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-latex", url = "latex-lsp/tree-sitter-latex", @@ -1550,7 +1626,7 @@ return }, { name = "tree-sitter-leo", url = "r001/tree-sitter-leo", - version = "0.0.29-1" + version = "0.0.33-1" }, { name = "tree-sitter-linkerscript", url = "tree-sitter-grammars/tree-sitter-linkerscript", @@ -1562,7 +1638,7 @@ return }, { name = "tree-sitter-liquidsoap", url = "savonet/tree-sitter-liquidsoap", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-llvm", url = "benwilliamgraham/tree-sitter-llvm", @@ -1570,7 +1646,7 @@ return }, { name = "tree-sitter-lua", url = "tree-sitter-grammars/tree-sitter-lua", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-luadoc", url = "tree-sitter-grammars/tree-sitter-luadoc", @@ -1582,7 +1658,7 @@ return }, { name = "tree-sitter-luau", url = "tree-sitter-grammars/tree-sitter-luau", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-m68k", url = "grahambates/tree-sitter-m68k", @@ -1594,15 +1670,15 @@ return }, { name = "tree-sitter-markdown", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.36-1" + version = "0.0.37-1" }, { name = "tree-sitter-markdown_inline", url = "tree-sitter-grammars/tree-sitter-markdown", - version = "0.0.36-1" + version = "0.0.37-1" }, { name = "tree-sitter-matlab", url = "acristoffers/tree-sitter-matlab", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-menhir", url = "Kerl13/tree-sitter-menhir", @@ -1618,7 +1694,7 @@ return }, { name = "tree-sitter-mlir", url = "artagnon/tree-sitter-mlir", - version = "0.0.40-1" + version = "0.0.43-1" }, { name = "tree-sitter-muttrc", url = "neomutt/tree-sitter-muttrc", @@ -1630,11 +1706,11 @@ return }, { name = "tree-sitter-nginx", url = "opa-oz/tree-sitter-nginx", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-nickel", url = "nickel-lang/tree-sitter-nickel", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-nim", url = "alaviss/tree-sitter-nim", @@ -1650,7 +1726,7 @@ return }, { name = "tree-sitter-nix", url = "cstrahan/tree-sitter-nix", - version = "0.0.51-1" + version = "0.0.54-1" }, { name = "tree-sitter-norg", url = "nvim-neorg/tree-sitter-norg", @@ -1666,11 +1742,11 @@ return }, { name = "tree-sitter-nu", url = "nushell/tree-sitter-nu", - version = "0.0.20-1" + version = "0.0.30-1" }, { name = "tree-sitter-objc", url = "tree-sitter-grammars/tree-sitter-objc", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-objdump", url = "ColinKennedy/tree-sitter-objdump", @@ -1678,11 +1754,11 @@ return }, { name = "tree-sitter-ocaml", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.34-1" + version = "0.0.38-1" }, { name = "tree-sitter-ocaml_interface", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.35-1" + version = "0.0.39-1" }, { name = "tree-sitter-ocamllex", url = "atom-ocaml/tree-sitter-ocamllex", @@ -1690,7 +1766,7 @@ return }, { name = "tree-sitter-odin", url = "tree-sitter-grammars/tree-sitter-odin", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-org", url = "milisims/tree-sitter-org", @@ -1714,15 +1790,15 @@ return }, { name = "tree-sitter-perl", url = "tree-sitter-perl/tree-sitter-perl", - version = "0.0.37-1" + version = "0.0.38-1" }, { name = "tree-sitter-php", url = "tree-sitter/tree-sitter-php", - version = "0.0.35-1" + version = "0.0.37-1" }, { name = "tree-sitter-php_only", url = "tree-sitter/tree-sitter-php", - version = "0.0.35-1" + version = "0.0.38-1" }, { name = "tree-sitter-phpdoc", url = "claytonrcarter/tree-sitter-phpdoc", @@ -1742,7 +1818,7 @@ return }, { name = "tree-sitter-poe_filter", url = "tree-sitter-grammars/tree-sitter-poe-filter", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-pony", url = "tree-sitter-grammars/tree-sitter-pony", @@ -1750,7 +1826,7 @@ return }, { name = "tree-sitter-powershell", url = "airbus-cert/tree-sitter-powershell", - version = "0.0.32-1" + version = "0.0.36-1" }, { name = "tree-sitter-printf", url = "tree-sitter-grammars/tree-sitter-printf", @@ -1758,7 +1834,7 @@ return }, { name = "tree-sitter-prisma", url = "victorhqc/tree-sitter-prisma", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-problog", url = "foxyseta/tree-sitter-prolog", @@ -1774,7 +1850,7 @@ return }, { name = "tree-sitter-properties", url = "tree-sitter-grammars/tree-sitter-properties", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-proto", url = "treywood/tree-sitter-proto", @@ -1794,7 +1870,7 @@ return }, { name = "tree-sitter-puppet", url = "tree-sitter-grammars/tree-sitter-puppet", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-purescript", url = "postsolar/tree-sitter-purescript", @@ -1806,7 +1882,7 @@ return }, { name = "tree-sitter-python", url = "tree-sitter/tree-sitter-python", - version = "0.0.33-1" + version = "0.0.39-1" }, { name = "tree-sitter-ql", url = "tree-sitter/tree-sitter-ql", @@ -1818,11 +1894,11 @@ return }, { name = "tree-sitter-qmljs", url = "yuja/tree-sitter-qmljs", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-query", url = "tree-sitter-grammars/tree-sitter-query", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-r", url = "r-lib/tree-sitter-r", @@ -1842,7 +1918,7 @@ return }, { name = "tree-sitter-rbs", url = "joker1007/tree-sitter-rbs", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-re2c", url = "tree-sitter-grammars/tree-sitter-re2c", @@ -1854,7 +1930,7 @@ return }, { name = "tree-sitter-regex", url = "tree-sitter/tree-sitter-regex", - version = "0.0.37-1" + version = "0.0.40-1" }, { name = "tree-sitter-rego", url = "FallenAngel97/tree-sitter-rego", @@ -1882,7 +1958,7 @@ return }, { name = "tree-sitter-roc", url = "faldor20/tree-sitter-roc", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-ron", url = "tree-sitter-grammars/tree-sitter-ron", @@ -1890,11 +1966,11 @@ return }, { name = "tree-sitter-rst", url = "stsewd/tree-sitter-rst", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-ruby", url = "tree-sitter/tree-sitter-ruby", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-runescript", url = "2004Scape/tree-sitter-runescript", @@ -1902,15 +1978,15 @@ return }, { name = "tree-sitter-rust", url = "tree-sitter/tree-sitter-rust", - version = "0.0.37-1" + version = "0.0.40-1" }, { name = "tree-sitter-scala", url = "tree-sitter/tree-sitter-scala", - version = "0.0.39-1" + version = "0.0.44-1" }, { name = "tree-sitter-scfg", url = "rockorager/tree-sitter-scfg", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-scheme", url = "6cdh/tree-sitter-scheme", @@ -1922,15 +1998,19 @@ return }, { name = "tree-sitter-sflog", url = "aheber/tree-sitter-sfapex", - version = "0.0.36-1" + version = "0.0.42-1" }, { name = "tree-sitter-slang", url = "tree-sitter-grammars/tree-sitter-slang", version = "0.0.32-1" + }, { + name = "tree-sitter-slim", + url = "theoo/tree-sitter-slim", + version = "0.0.3-1" }, { name = "tree-sitter-slint", url = "slint-ui/tree-sitter-slint", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-smali", url = "tree-sitter-grammars/tree-sitter-smali", @@ -1942,23 +2022,23 @@ return }, { name = "tree-sitter-snakemake", url = "osthomas/tree-sitter-snakemake", - version = "0.0.29-1" + version = "0.0.31-1" }, { name = "tree-sitter-solidity", url = "JoranHonig/tree-sitter-solidity", - version = "0.0.31-1" + version = "0.0.34-1" }, { name = "tree-sitter-soql", url = "aheber/tree-sitter-sfapex", - version = "0.0.37-1" + version = "0.0.44-1" }, { name = "tree-sitter-sosl", url = "aheber/tree-sitter-sfapex", - version = "0.0.36-1" + version = "0.0.42-1" }, { name = "tree-sitter-sourcepawn", url = "nilshelmig/tree-sitter-sourcepawn", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-sparql", url = "GordianDziwis/tree-sitter-sparql", @@ -1966,7 +2046,7 @@ return }, { name = "tree-sitter-sql", url = "derekstride/tree-sitter-sql", - version = "0.0.37-1" + version = "0.0.39-1" }, { name = "tree-sitter-squirrel", url = "tree-sitter-grammars/tree-sitter-squirrel", @@ -1974,11 +2054,11 @@ return }, { name = "tree-sitter-ssh_config", url = "tree-sitter-grammars/tree-sitter-ssh-config", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-starlark", url = "tree-sitter-grammars/tree-sitter-starlark", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-strace", url = "sigmaSd/tree-sitter-strace", @@ -1994,7 +2074,7 @@ return }, { name = "tree-sitter-superhtml", url = "kristoff-it/superhtml", - version = "0.0.11-1" + version = "0.0.12-1" }, { name = "tree-sitter-surface", url = "connorlay/tree-sitter-surface", @@ -2010,11 +2090,11 @@ return }, { name = "tree-sitter-swift", url = "alex-pinkus/tree-sitter-swift", - version = "0.0.41-1" + version = "0.0.44-1" }, { name = "tree-sitter-sxhkdrc", url = "RaafatTurki/tree-sitter-sxhkdrc", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-systemtap", url = "ok-ryoko/tree-sitter-systemtap", @@ -2025,8 +2105,8 @@ return version = "0.0.29-1" }, { name = "tree-sitter-t32", - url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/7c8579685e34116c61971240780b316c54be698b.zip", - version = "0.0.37-1" + url = "https://gitlab.com/xasc/tree-sitter-t32/-/archive/e5a12f798f056049642aa03fbb83786e3a5b95d4.zip", + version = "0.0.41-1" }, { name = "tree-sitter-tablegen", url = "tree-sitter-grammars/tree-sitter-tablegen", @@ -2042,11 +2122,11 @@ return }, { name = "tree-sitter-teal", url = "euclidianAce/tree-sitter-teal", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-templ", url = "vrischmann/tree-sitter-templ", - version = "0.0.38-1" + version = "0.0.44-1" }, { name = "tree-sitter-terraform", url = "MichaHoffmann/tree-sitter-hcl", @@ -2086,7 +2166,7 @@ return }, { name = "tree-sitter-tsx", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.31-1" + version = "0.0.34-1" }, { name = "tree-sitter-turtle", url = "GordianDziwis/tree-sitter-turtle", @@ -2098,11 +2178,11 @@ return }, { name = "tree-sitter-typescript", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.31-1" + version = "0.0.34-1" }, { name = "tree-sitter-typespec", url = "happenslol/tree-sitter-typespec", - version = "0.0.31-1" + version = "0.0.33-1" }, { name = "tree-sitter-typoscript", url = "Teddytrombone/tree-sitter-typoscript", @@ -2134,7 +2214,7 @@ return }, { name = "tree-sitter-v", url = "vlang/v-analyzer", - version = "0.0.38-1" + version = "0.0.42-1" }, { name = "tree-sitter-vala", url = "vala-lang/tree-sitter-vala", @@ -2142,19 +2222,19 @@ return }, { name = "tree-sitter-vento", url = "ventojs/tree-sitter-vento", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-verilog", url = "gmlarumbe/tree-sitter-systemverilog", - version = "0.0.34-1" + version = "0.0.38-1" }, { name = "tree-sitter-vhdl", url = "jpt13653903/tree-sitter-vhdl", - version = "0.0.34-1" + version = "0.0.37-1" }, { name = "tree-sitter-vhs", url = "charmbracelet/tree-sitter-vhs", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-vim", url = "tree-sitter-grammars/tree-sitter-vim", @@ -2194,15 +2274,15 @@ return }, { name = "tree-sitter-xml", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-xresources", url = "ValdezFOmar/tree-sitter-xresources", - version = "0.0.12-1" + version = "0.0.19-1" }, { name = "tree-sitter-yaml", url = "tree-sitter-grammars/tree-sitter-yaml", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-yang", url = "Hubro/tree-sitter-yang", @@ -2218,15 +2298,15 @@ return }, { name = "tree-sitter-zig", url = "tree-sitter-grammars/tree-sitter-zig", - version = "0.0.32-1" + version = "0.0.34-1" }, { name = "tree-sitter-ziggy", url = "kristoff-it/ziggy", - version = "0.0.7-1" + version = "0.0.8-1" }, { name = "tree-sitter-ziggy_schema", url = "kristoff-it/ziggy", - version = "0.0.7-1" + version = "0.0.8-1" }, { name = "treedoc.nvim", url = "neo451/treedoc.nvim", @@ -2234,7 +2314,7 @@ return }, { name = "trouble.nvim", url = "folke/trouble.nvim", - version = "3.6.0-1" + version = "3.7.0-1" }, { name = "ts-comments.nvim", url = "folke/ts-comments.nvim", @@ -2242,7 +2322,7 @@ return }, { name = "tsc.nvim", url = "dmmulroy/tsc.nvim", - version = "2.4.1-1" + version = "2.5.0-1" }, { name = "twilight.nvim", url = "folke/twilight.nvim", @@ -2254,15 +2334,15 @@ return }, { name = "unimpaired.nvim", url = "tummetott/unimpaired.nvim", - version = "0.2.0-1" + version = "0.3.0-1" }, { name = "vgit.nvim", url = "tanvirtin/vgit.nvim", - version = "0.2.3-1" + version = "1.0.2-1" }, { name = "which-key.nvim", url = "folke/which-key.nvim", - version = "3.14.1-1" + version = "3.16.0-1" }, { name = "windline.nvim", url = "windwp/windline.nvim", @@ -2270,7 +2350,7 @@ return }, { name = "winmove.nvim", url = "MisanthropicBit/winmove.nvim", - version = "0.1.0-1" + version = "0.1.1-1" }, { name = "wormhole.nvim", url = "NStefan002/wormhole.nvim", @@ -2286,7 +2366,7 @@ return }, { name = "yazi.nvim", url = "mikavilpas/yazi.nvim", - version = "6.6.1-1" + version = "7.5.1-1" }, { name = "zen-mode.nvim", url = "folke/zen-mode.nvim", @@ -2294,5 +2374,5 @@ return }, { name = "zk-nvim", url = "zk-org/zk-nvim", - version = "0.1.1-1" + version = "0.2.0-1" } } \ No newline at end of file From f15a93907ddad3d9139aea465ae18336d87f5ce6 Mon Sep 17 00:00:00 2001 From: JINNOUCHI Yasushi Date: Thu, 6 Feb 2025 15:53:12 +0900 Subject: [PATCH 806/815] fix(ui): do not show virt_lines for messages (#1904) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description https://github.com/neovim/neovim/pull/31959 has introduced virtual lines for showing diagnostics. If this is enabled (default value), messages from lazy.nvim, such as `update available` are shown as virtual lines in addition to virtual texts. ## Related Issue(s) ## Screenshots * ***before*** - スクリーンショット 2025-01-27 16 42 27 * ***after*** - スクリーンショット 2025-01-27 16 42 58 --- lua/lazy/view/render.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 8c49a1b..b545af0 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -94,7 +94,7 @@ function M:update() diag.lnum = diag.row - 1 return diag end, self._diagnostics), - { signs = false, virtual_text = true, underline = false } + { signs = false, virtual_text = true, underline = false, virtual_lines = false } ) end From c6a57a3534d3494bcc5ff9b0586e141bdb0280eb Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 15 Feb 2025 08:19:49 +0100 Subject: [PATCH 807/815] feat(util): pass lang to `vim.notify` so that snacks notifier can render the ft. Closes #1919 --- lua/lazy/core/util.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 9db7f14..83e8a92 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -374,6 +374,7 @@ function M.notify(msg, opts) local lang = opts.lang or "markdown" local n = opts.once and vim.notify_once or vim.notify n(msg, opts.level or vim.log.levels.INFO, { + ft = lang, on_open = function(win) local ok = pcall(function() vim.treesitter.language.add("markdown") From ac21a639c7ecfc8b822dcc9455deceea3778f839 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 15 Feb 2025 07:25:07 +0000 Subject: [PATCH 808/815] chore(build): auto-generate rockspec mappings --- lua/lazy/community/_generated.lua | 224 +++++++++++++++++------------- 1 file changed, 128 insertions(+), 96 deletions(-) diff --git a/lua/lazy/community/_generated.lua b/lua/lazy/community/_generated.lua index d3ba8f6..7e41487 100644 --- a/lua/lazy/community/_generated.lua +++ b/lua/lazy/community/_generated.lua @@ -38,7 +38,7 @@ return }, { name = "avante.nvim", url = "yetone/avante.nvim", - version = "0.0.15-1" + version = "0.0.18-1" }, { name = "banana.nvim", url = "CWood-sdf/banana.nvim", @@ -83,10 +83,14 @@ return name = "cmp-rg", url = "lukas-reineke/cmp-rg", version = "1.3.11-1" + }, { + name = "code-stats.nvim", + url = "Freed-Wu/code-stats.nvim", + version = "0.0.2-1" }, { name = "colorbox.nvim", url = "linrongbin16/colorbox.nvim", - version = "3.1.0-1" + version = "3.1.1-1" }, { name = "colorbuddy.nvim", url = "tjdevries/colorbuddy.nvim", @@ -114,7 +118,7 @@ return }, { name = "commons.nvim", url = "linrongbin16/commons.nvim", - version = "26.0.0-1" + version = "27.0.0-1" }, { name = "conform.nvim", url = "stevearc/conform.nvim", @@ -130,7 +134,7 @@ return }, { name = "cord.nvim", url = "vyfor/cord.nvim", - version = "2.0.0beta-9" + version = "2.0.3-1" }, { name = "cursor-text-objects.nvim", url = "ColinKennedy/cursor-text-objects.nvim", @@ -158,7 +162,7 @@ return }, { name = "decipher.nvim", url = "MisanthropicBit/decipher.nvim", - version = "1.0.2-1" + version = "1.0.3-1" }, { name = "delog.nvim", url = "ej-shafran/delog.nvim", @@ -198,7 +202,7 @@ return }, { name = "dropbar.nvim", url = "Bekaboo/dropbar.nvim", - version = "11.0.0-1" + version = "12.0.0-1" }, { name = "duck.nvim", url = "tamton-aquib/duck.nvim", @@ -234,7 +238,7 @@ return }, { name = "fidget.nvim", url = "j-hui/fidget.nvim", - version = "1.4.1-1" + version = "1.6.0-1" }, { name = "flash.nvim", url = "folke/flash.nvim", @@ -270,7 +274,7 @@ return }, { name = "fzfx.nvim", url = "linrongbin16/fzfx.nvim", - version = "8.0.0-1" + version = "8.1.1-1" }, { name = "galileo.nvim", url = "S1M0N38/galileo.nvim", @@ -298,7 +302,7 @@ return }, { name = "gitsigns.nvim", url = "lewis6991/gitsigns.nvim", - version = "0.9.0-1" + version = "1.0.0-1" }, { name = "glow.nvim", url = "ellisonleao/glow.nvim", @@ -334,7 +338,7 @@ return }, { name = "haskell-tools.nvim", url = "mrcjkb/haskell-tools.nvim", - version = "4.4.0-1" + version = "4.4.2-1" }, { name = "headlines.nvim", url = "lukas-reineke/headlines.nvim", @@ -346,7 +350,7 @@ return }, { name = "helpview.nvim", url = "OXY2DEV/helpview.nvim", - version = "1.1.0-1" + version = "2.0.1-1" }, { name = "hibiscus.nvim", url = "udayvir-singh/hibiscus.nvim", @@ -362,7 +366,7 @@ return }, { name = "hurl.nvim", url = "jellydn/hurl.nvim", - version = "2.0.1-1" + version = "2.1.0-1" }, { name = "hydra.nvim", url = "nvimtools/hydra.nvim", @@ -371,6 +375,10 @@ return name = "image.nvim", url = "3rd/image.nvim", version = "1.3.0-1" + }, { + name = "ime.nvim", + url = "Freed-Wu/ime.nvim", + version = "0.0.1-1" }, { name = "incline.nvim", url = "b0o/incline.nvim", @@ -450,7 +458,7 @@ return }, { name = "lua-console.nvim", url = "YaroSpace/lua-console.nvim", - version = "1.2.3-1" + version = "1.2.4-1" }, { name = "lua-obfuscator.nvim", url = "git+ssh://git@github.com/kdssoftware/lua-obfuscator.nvim.git", @@ -494,7 +502,7 @@ return }, { name = "markview.nvim", url = "OXY2DEV/markview.nvim", - version = "25.1.0-1" + version = "25.3.1-1" }, { name = "mason-lspconfig.nvim", url = "williamboman/mason-lspconfig.nvim", @@ -515,6 +523,10 @@ return name = "mini.nvim", url = "echasnovski/mini.nvim", version = "0.15.0-1" + }, { + name = "minuet-ai.nvim", + url = "milanglacier/minuet-ai.nvim", + version = "0.3.2-1" }, { name = "mkdnflow.nvim", url = "jakewvincent/mkdnflow.nvim", @@ -574,7 +586,7 @@ return }, { name = "neorg-query", url = "benlubas/neorg-query", - version = "1.2.0-1" + version = "1.3.1-1" }, { name = "neorg-se", url = "benlubas/neorg-se", @@ -606,7 +618,7 @@ return }, { name = "neotest-golang", url = "fredrikaverpil/neotest-golang", - version = "1.9.1-1" + version = "1.10.1-1" }, { name = "neotest-haskell", url = "mrcjkb/neotest-haskell", @@ -638,7 +650,7 @@ return }, { name = "noice.nvim", url = "folke/noice.nvim", - version = "4.9.0-1" + version = "4.10.0-1" }, { name = "npackages.nvim", url = "diegofigs/npackages.nvim", @@ -658,7 +670,7 @@ return }, { name = "nvim-best-practices-plugin-template", url = "ColinKennedy/nvim-best-practices-plugin-template", - version = "1.6.0-1" + version = "1.7.0-1" }, { name = "nvim-bqf", url = "kevinhwang91/nvim-bqf", @@ -750,7 +762,7 @@ return }, { name = "nvim-possession", url = "gennaro-tedesco/nvim-possession", - version = "0.0.17-1" + version = "0.1.0-1" }, { name = "nvim-scrollview", url = "dstein64/nvim-scrollview", @@ -810,7 +822,7 @@ return }, { name = "onedarkpro.nvim", url = "olimorris/onedarkpro.nvim", - version = "2.8.0-1" + version = "2.9.0-1" }, { name = "onenord.nvim", url = "rmehri01/onenord.nvim", @@ -818,7 +830,7 @@ return }, { name = "otter.nvim", url = "jmbuhr/otter.nvim", - version = "2.6.0-1" + version = "2.6.1-1" }, { name = "overseer.nvim", url = "stevearc/overseer.nvim", @@ -890,11 +902,11 @@ return }, { name = "render-markdown.nvim", url = "MeanderingProgrammer/render-markdown.nvim", - version = "7.8.0-1" + version = "8.0.0-1" }, { name = "rest.nvim", url = "rest-nvim/rest.nvim", - version = "3.9.1-1" + version = "3.11.1-1" }, { name = "rime.nvim", url = "Freed-Wu/rime.nvim", @@ -914,7 +926,7 @@ return }, { name = "rocks-lazy.nvim", url = "nvim-neorocks/rocks-lazy.nvim", - version = "1.1.2-1" + version = "1.2.0-1" }, { name = "rocks-treesitter.nvim", url = "nvim-neorocks/rocks-treesitter.nvim", @@ -922,7 +934,7 @@ return }, { name = "rocks.nvim", url = "nvim-neorocks/rocks.nvim", - version = "2.43.0-1" + version = "2.43.1-1" }, { name = "rtp.nvim", url = "nvim-neorocks/rtp.nvim", @@ -934,7 +946,7 @@ return }, { name = "rustaceanvim", url = "mrcjkb/rustaceanvim", - version = "5.24.2-1" + version = "5.24.4-1" }, { name = "schemastore.nvim", url = "b0o/SchemaStore.nvim", @@ -966,7 +978,7 @@ return }, { name = "snacks.nvim", url = "folke/snacks.nvim", - version = "2.15.0-1" + version = "2.20.0-1" }, { name = "sos.nvim", url = "tmillr/sos.nvim", @@ -1018,7 +1030,7 @@ return }, { name = "telescope-frecency.nvim", url = "nvim-telescope/telescope-frecency.nvim", - version = "1.0.5-1" + version = "1.2.0-1" }, { name = "telescope-zf-native.nvim", url = "natecraddock/telescope-zf-native.nvim", @@ -1054,7 +1066,7 @@ return }, { name = "tree-sitter-apex", url = "aheber/tree-sitter-sfapex", - version = "0.0.45-1" + version = "0.0.47-1" }, { name = "tree-sitter-arduino", url = "tree-sitter-grammars/tree-sitter-arduino", @@ -1062,7 +1074,7 @@ return }, { name = "tree-sitter-asm", url = "RubixDev/tree-sitter-asm", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-astro", url = "virchau13/tree-sitter-astro", @@ -1078,7 +1090,7 @@ return }, { name = "tree-sitter-bash", url = "tree-sitter/tree-sitter-bash", - version = "0.0.39-1" + version = "0.0.40-1" }, { name = "tree-sitter-bass", url = "vito/tree-sitter-bass", @@ -1110,11 +1122,11 @@ return }, { name = "tree-sitter-c", url = "tree-sitter/tree-sitter-c", - version = "0.0.38-1" + version = "0.0.41-1" }, { name = "tree-sitter-c_sharp", url = "tree-sitter/tree-sitter-c-sharp", - version = "0.0.38-1" + version = "0.0.40-1" }, { name = "tree-sitter-cairo", url = "tree-sitter-grammars/tree-sitter-cairo", @@ -1134,7 +1146,7 @@ return }, { name = "tree-sitter-cli", url = "FourierTransformer/tree-sitter-cli", - version = "0.24.5-1" + version = "0.25.1-2" }, { name = "tree-sitter-clojure", url = "sogaiu/tree-sitter-clojure", @@ -1166,11 +1178,11 @@ return }, { name = "tree-sitter-cpp", url = "tree-sitter/tree-sitter-cpp", - version = "0.0.39-1" + version = "0.0.41-1" }, { name = "tree-sitter-css", url = "tree-sitter/tree-sitter-css", - version = "0.0.35-1" + version = "0.0.36-1" }, { name = "tree-sitter-csv", url = "tree-sitter-grammars/tree-sitter-csv", @@ -1182,7 +1194,7 @@ return }, { name = "tree-sitter-cue", url = "eonpatapon/tree-sitter-cue", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-cylc", url = "elliotfontaine/tree-sitter-cylc", @@ -1198,7 +1210,7 @@ return }, { name = "tree-sitter-desktop", url = "ValdezFOmar/tree-sitter-desktop", - version = "0.0.6-1" + version = "0.0.8-1" }, { name = "tree-sitter-devicetree", url = "joelspadin/tree-sitter-devicetree", @@ -1218,7 +1230,7 @@ return }, { name = "tree-sitter-djot", url = "treeman/tree-sitter-djot", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-dockerfile", url = "camdencheek/tree-sitter-dockerfile", @@ -1234,11 +1246,11 @@ return }, { name = "tree-sitter-dtd", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-earthfile", url = "glehmann/tree-sitter-earthfile", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-ebnf", url = "RubixDev/ebnf", @@ -1246,7 +1258,7 @@ return }, { name = "tree-sitter-ecma", url = "nvim-neorocks/luarocks-stub", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-editorconfig", url = "ValdezFOmar/tree-sitter-editorconfig", @@ -1262,7 +1274,7 @@ return }, { name = "tree-sitter-elixir", url = "elixir-lang/tree-sitter-elixir", - version = "0.0.38-1" + version = "0.0.39-1" }, { name = "tree-sitter-elm", url = "elm-tooling/tree-sitter-elm", @@ -1279,10 +1291,14 @@ return name = "tree-sitter-embedded_template", url = "tree-sitter/tree-sitter-embedded-template", version = "0.0.34-1" + }, { + name = "tree-sitter-enforce", + url = "simonvic/tree-sitter-enforce", + version = "0.0.2-1" }, { name = "tree-sitter-erlang", url = "WhatsApp/tree-sitter-erlang", - version = "0.0.36-1" + version = "0.0.40-1" }, { name = "tree-sitter-facility", url = "FacilityApi/tree-sitter-facility", @@ -1326,7 +1342,7 @@ return }, { name = "tree-sitter-fsharp", url = "ionide/tree-sitter-fsharp", - version = "0.0.10-1" + version = "0.0.11-1" }, { name = "tree-sitter-func", url = "tree-sitter-grammars/tree-sitter-func", @@ -1374,7 +1390,7 @@ return }, { name = "tree-sitter-gleam", url = "gleam-lang/tree-sitter-gleam", - version = "0.0.33-1" + version = "0.0.35-1" }, { name = "tree-sitter-glimmer", url = "ember-tooling/tree-sitter-glimmer", @@ -1402,7 +1418,7 @@ return }, { name = "tree-sitter-go", url = "tree-sitter/tree-sitter-go", - version = "0.0.38-1" + version = "0.0.39-1" }, { name = "tree-sitter-goctl", url = "chaozwn/tree-sitter-goctl", @@ -1458,7 +1474,7 @@ return }, { name = "tree-sitter-haskell", url = "tree-sitter/tree-sitter-haskell", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-haskell_persistent", url = "MercuryTechnologies/tree-sitter-haskell-persistent", @@ -1498,7 +1514,7 @@ return }, { name = "tree-sitter-html", url = "tree-sitter/tree-sitter-html", - version = "0.0.35-1" + version = "0.0.36-1" }, { name = "tree-sitter-html_tags", url = "nvim-neorocks/luarocks-stub", @@ -1510,7 +1526,7 @@ return }, { name = "tree-sitter-http", url = "rest-nvim/tree-sitter-http", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-hurl", url = "pfeiferj/tree-sitter-hurl", @@ -1518,11 +1534,11 @@ return }, { name = "tree-sitter-hyprlang", url = "tree-sitter-grammars/tree-sitter-hyprlang", - version = "0.0.33-1" + version = "0.0.34-1" }, { name = "tree-sitter-idl", url = "cathaysia/tree-sitter-idl", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-idris", url = "kayhide/tree-sitter-idris", @@ -1546,15 +1562,23 @@ return }, { name = "tree-sitter-janet_simple", url = "sogaiu/tree-sitter-janet-simple", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-java", url = "tree-sitter/tree-sitter-java", - version = "0.0.39-1" + version = "0.0.40-1" }, { name = "tree-sitter-javascript", url = "tree-sitter/tree-sitter-javascript", - version = "0.0.35-1" + version = "0.0.36-1" + }, { + name = "tree-sitter-jinja", + url = "cathaysia/tree-sitter-jinja", + version = "0.0.2-1" + }, { + name = "tree-sitter-jinja_inline", + url = "cathaysia/tree-sitter-jinja", + version = "0.0.2-1" }, { name = "tree-sitter-jq", url = "flurie/tree-sitter-jq", @@ -1566,7 +1590,7 @@ return }, { name = "tree-sitter-json", url = "tree-sitter/tree-sitter-json", - version = "0.0.35-1" + version = "0.0.36-1" }, { name = "tree-sitter-json5", url = "Joakker/tree-sitter-json5", @@ -1586,7 +1610,7 @@ return }, { name = "tree-sitter-julia", url = "tree-sitter/tree-sitter-julia", - version = "0.0.40-1" + version = "0.0.42-1" }, { name = "tree-sitter-just", url = "IndianBoy42/tree-sitter-just", @@ -1646,7 +1670,7 @@ return }, { name = "tree-sitter-lua", url = "tree-sitter-grammars/tree-sitter-lua", - version = "0.0.32-1" + version = "0.0.33-1" }, { name = "tree-sitter-luadoc", url = "tree-sitter-grammars/tree-sitter-luadoc", @@ -1678,7 +1702,7 @@ return }, { name = "tree-sitter-matlab", url = "acristoffers/tree-sitter-matlab", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-menhir", url = "Kerl13/tree-sitter-menhir", @@ -1694,7 +1718,7 @@ return }, { name = "tree-sitter-mlir", url = "artagnon/tree-sitter-mlir", - version = "0.0.43-1" + version = "0.0.44-1" }, { name = "tree-sitter-muttrc", url = "neomutt/tree-sitter-muttrc", @@ -1726,7 +1750,7 @@ return }, { name = "tree-sitter-nix", url = "cstrahan/tree-sitter-nix", - version = "0.0.54-1" + version = "0.0.56-1" }, { name = "tree-sitter-norg", url = "nvim-neorg/tree-sitter-norg", @@ -1742,11 +1766,11 @@ return }, { name = "tree-sitter-nu", url = "nushell/tree-sitter-nu", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-objc", url = "tree-sitter-grammars/tree-sitter-objc", - version = "0.0.30-1" + version = "0.0.31-1" }, { name = "tree-sitter-objdump", url = "ColinKennedy/tree-sitter-objdump", @@ -1754,15 +1778,15 @@ return }, { name = "tree-sitter-ocaml", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.38-1" + version = "0.0.39-1" }, { name = "tree-sitter-ocaml_interface", url = "tree-sitter/tree-sitter-ocaml", - version = "0.0.39-1" + version = "0.0.40-1" }, { name = "tree-sitter-ocamllex", url = "atom-ocaml/tree-sitter-ocamllex", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-odin", url = "tree-sitter-grammars/tree-sitter-odin", @@ -1790,15 +1814,15 @@ return }, { name = "tree-sitter-perl", url = "tree-sitter-perl/tree-sitter-perl", - version = "0.0.38-1" + version = "0.0.41-1" }, { name = "tree-sitter-php", url = "tree-sitter/tree-sitter-php", - version = "0.0.37-1" + version = "0.0.38-1" }, { name = "tree-sitter-php_only", url = "tree-sitter/tree-sitter-php", - version = "0.0.38-1" + version = "0.0.39-1" }, { name = "tree-sitter-phpdoc", url = "claytonrcarter/tree-sitter-phpdoc", @@ -1830,7 +1854,7 @@ return }, { name = "tree-sitter-printf", url = "tree-sitter-grammars/tree-sitter-printf", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-prisma", url = "victorhqc/tree-sitter-prisma", @@ -1882,7 +1906,7 @@ return }, { name = "tree-sitter-python", url = "tree-sitter/tree-sitter-python", - version = "0.0.39-1" + version = "0.0.40-1" }, { name = "tree-sitter-ql", url = "tree-sitter/tree-sitter-ql", @@ -1898,7 +1922,7 @@ return }, { name = "tree-sitter-query", url = "tree-sitter-grammars/tree-sitter-query", - version = "0.0.31-1" + version = "0.0.34-1" }, { name = "tree-sitter-r", url = "r-lib/tree-sitter-r", @@ -1915,6 +1939,10 @@ return name = "tree-sitter-rasi", url = "Fymyte/tree-sitter-rasi", version = "0.0.29-1" + }, { + name = "tree-sitter-razor", + url = "tris203/tree-sitter-razor", + version = "0.0.1-1" }, { name = "tree-sitter-rbs", url = "joker1007/tree-sitter-rbs", @@ -1966,11 +1994,11 @@ return }, { name = "tree-sitter-rst", url = "stsewd/tree-sitter-rst", - version = "0.0.31-1" + version = "0.0.32-1" }, { name = "tree-sitter-ruby", url = "tree-sitter/tree-sitter-ruby", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-runescript", url = "2004Scape/tree-sitter-runescript", @@ -1978,11 +2006,11 @@ return }, { name = "tree-sitter-rust", url = "tree-sitter/tree-sitter-rust", - version = "0.0.40-1" + version = "0.0.41-1" }, { name = "tree-sitter-scala", url = "tree-sitter/tree-sitter-scala", - version = "0.0.44-1" + version = "0.0.46-1" }, { name = "tree-sitter-scfg", url = "rockorager/tree-sitter-scfg", @@ -1998,7 +2026,7 @@ return }, { name = "tree-sitter-sflog", url = "aheber/tree-sitter-sfapex", - version = "0.0.42-1" + version = "0.0.44-1" }, { name = "tree-sitter-slang", url = "tree-sitter-grammars/tree-sitter-slang", @@ -2030,11 +2058,11 @@ return }, { name = "tree-sitter-soql", url = "aheber/tree-sitter-sfapex", - version = "0.0.44-1" + version = "0.0.46-1" }, { name = "tree-sitter-sosl", url = "aheber/tree-sitter-sfapex", - version = "0.0.42-1" + version = "0.0.44-1" }, { name = "tree-sitter-sourcepawn", url = "nilshelmig/tree-sitter-sourcepawn", @@ -2042,7 +2070,7 @@ return }, { name = "tree-sitter-sparql", url = "GordianDziwis/tree-sitter-sparql", - version = "0.0.29-1" + version = "0.0.30-1" }, { name = "tree-sitter-sql", url = "derekstride/tree-sitter-sql", @@ -2074,7 +2102,7 @@ return }, { name = "tree-sitter-superhtml", url = "kristoff-it/superhtml", - version = "0.0.12-1" + version = "0.0.13-1" }, { name = "tree-sitter-surface", url = "connorlay/tree-sitter-surface", @@ -2090,7 +2118,7 @@ return }, { name = "tree-sitter-swift", url = "alex-pinkus/tree-sitter-swift", - version = "0.0.44-1" + version = "0.0.45-1" }, { name = "tree-sitter-sxhkdrc", url = "RaafatTurki/tree-sitter-sxhkdrc", @@ -2126,7 +2154,7 @@ return }, { name = "tree-sitter-templ", url = "vrischmann/tree-sitter-templ", - version = "0.0.44-1" + version = "0.0.45-1" }, { name = "tree-sitter-terraform", url = "MichaHoffmann/tree-sitter-hcl", @@ -2166,7 +2194,7 @@ return }, { name = "tree-sitter-tsx", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.34-1" + version = "0.0.35-1" }, { name = "tree-sitter-turtle", url = "GordianDziwis/tree-sitter-turtle", @@ -2178,7 +2206,7 @@ return }, { name = "tree-sitter-typescript", url = "tree-sitter/tree-sitter-typescript", - version = "0.0.34-1" + version = "0.0.36-1" }, { name = "tree-sitter-typespec", url = "happenslol/tree-sitter-typespec", @@ -2190,7 +2218,7 @@ return }, { name = "tree-sitter-typst", url = "uben0/tree-sitter-typst", - version = "0.0.32-1" + version = "0.0.35-1" }, { name = "tree-sitter-udev", url = "tree-sitter-grammars/tree-sitter-udev", @@ -2214,7 +2242,7 @@ return }, { name = "tree-sitter-v", url = "vlang/v-analyzer", - version = "0.0.42-1" + version = "0.0.43-1" }, { name = "tree-sitter-vala", url = "vala-lang/tree-sitter-vala", @@ -2230,11 +2258,11 @@ return }, { name = "tree-sitter-vhdl", url = "jpt13653903/tree-sitter-vhdl", - version = "0.0.37-1" + version = "0.0.38-1" }, { name = "tree-sitter-vhs", url = "charmbracelet/tree-sitter-vhs", - version = "0.0.30-1" + version = "0.0.32-1" }, { name = "tree-sitter-vim", url = "tree-sitter-grammars/tree-sitter-vim", @@ -2274,7 +2302,7 @@ return }, { name = "tree-sitter-xml", url = "tree-sitter-grammars/tree-sitter-xml", - version = "0.0.35-1" + version = "0.0.36-1" }, { name = "tree-sitter-xresources", url = "ValdezFOmar/tree-sitter-xresources", @@ -2302,11 +2330,11 @@ return }, { name = "tree-sitter-ziggy", url = "kristoff-it/ziggy", - version = "0.0.8-1" + version = "0.0.9-1" }, { name = "tree-sitter-ziggy_schema", url = "kristoff-it/ziggy", - version = "0.0.8-1" + version = "0.0.9-1" }, { name = "treedoc.nvim", url = "neo451/treedoc.nvim", @@ -2314,7 +2342,7 @@ return }, { name = "trouble.nvim", url = "folke/trouble.nvim", - version = "3.7.0-1" + version = "3.7.1-1" }, { name = "ts-comments.nvim", url = "folke/ts-comments.nvim", @@ -2338,7 +2366,7 @@ return }, { name = "vgit.nvim", url = "tanvirtin/vgit.nvim", - version = "1.0.2-1" + version = "1.0.6-1" }, { name = "which-key.nvim", url = "folke/which-key.nvim", @@ -2350,7 +2378,7 @@ return }, { name = "winmove.nvim", url = "MisanthropicBit/winmove.nvim", - version = "0.1.1-1" + version = "0.1.2-1" }, { name = "wormhole.nvim", url = "NStefan002/wormhole.nvim", @@ -2363,10 +2391,14 @@ return name = "yanky.nvim", url = "gbprod/yanky.nvim", version = "2.0.0-1" + }, { + name = "yarepl.nvim", + url = "milanglacier/yarepl.nvim", + version = "0.10.1-1" }, { name = "yazi.nvim", url = "mikavilpas/yazi.nvim", - version = "7.5.1-1" + version = "7.5.4-1" }, { name = "zen-mode.nvim", url = "folke/zen-mode.nvim", From f81a3fb7feaf460ec7c8c983682b4a693b18fdd4 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 15 Feb 2025 23:06:09 +0100 Subject: [PATCH 809/815] fix(meta): disable top-level specs before the rest. Closes #1889 --- lua/lazy/core/meta.lua | 26 +++++++++++++++++++------- lua/lazy/types.lua | 1 + 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 88263a2..5e026f4 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -179,6 +179,7 @@ function M:_rebuild(name) local super = nil plugin.url = nil plugin._.dep = true + plugin._.top = true plugin.optional = true assert(#plugin._.frags > 0, "no fragments found for plugin " .. name) @@ -195,6 +196,7 @@ function M:_rebuild(name) plugin._.dep = plugin._.dep and fragment.dep plugin.optional = plugin.optional and (rawget(fragment.spec, "optional") == true) plugin.url = fragment.url or plugin.url + plugin._.top = plugin._.top and fragment.pid == nil -- dependencies for _, dep in ipairs(fragment.deps or {}) do @@ -302,16 +304,26 @@ end --- Removes plugins that are disabled. function M:fix_disabled() local changes = 0 - for _, plugin in pairs(self.plugins) do - if plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled()) then - changes = changes + 1 - if plugin.optional then - self:del(plugin.name) - else - self:disable(plugin) + local function check(top) + for _, plugin in pairs(self.plugins) do + if plugin._.top == top then + if plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled()) then + changes = changes + 1 + if plugin.optional then + self:del(plugin.name) + else + self:disable(plugin) + end + end end end end + -- disable top-level plugins first, since they may have non-top-level frags + -- that disable other plugins + check(true) + self:rebuild() + -- then disable non-top-level plugins + check(false) self:rebuild() return changes end diff --git a/lua/lazy/types.lua b/lua/lazy/types.lua index 6e406bb..7700229 100644 --- a/lua/lazy/types.lua +++ b/lua/lazy/types.lua @@ -10,6 +10,7 @@ ---@field dirty? boolean ---@field build? boolean ---@field frags? number[] +---@field top? boolean ---@field handlers? LazyPluginHandlers ---@field installed? boolean ---@field is_local? boolean From e5e9bf48211a13d9ee6c1077c88327c49c1ab4a0 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Sat, 15 Feb 2025 23:09:58 +0100 Subject: [PATCH 810/815] test: fix tests --- lua/lazy/core/meta.lua | 2 +- tests/core/plugin_spec.lua | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 5e026f4..0a55656 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -306,7 +306,7 @@ function M:fix_disabled() local changes = 0 local function check(top) for _, plugin in pairs(self.plugins) do - if plugin._.top == top then + if (plugin._.top or false) == top then if plugin.enabled == false or (type(plugin.enabled) == "function" and not plugin.enabled()) then changes = changes + 1 if plugin.optional then diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index 166dc2a..7982649 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -25,6 +25,7 @@ local function clean(plugins) if plugin._.dep == false then plugin._.dep = nil end + plugin._.top = nil return plugin end, plugins) end From a8c6db5da7bd382094606340eed015d14fbb5654 Mon Sep 17 00:00:00 2001 From: Salomon Popp Date: Mon, 24 Feb 2025 07:20:35 +0100 Subject: [PATCH 811/815] style(types): add optional return value for `LazyKeysSpec` rhs (#1924) ## Description when `expr=true` the rhs function should return a string. example ```lua { keys = { { 'j', function() return require('dial.map').inc_normal() end, expr = true, desc = 'Increment value', } } } ``` ## Related Issue(s) ## Screenshots --- lua/lazy/core/handler/keys.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/lazy/core/handler/keys.lua b/lua/lazy/core/handler/keys.lua index 57fbc18..5b5f173 100644 --- a/lua/lazy/core/handler/keys.lua +++ b/lua/lazy/core/handler/keys.lua @@ -11,7 +11,7 @@ local Util = require("lazy.core.util") ---@class LazyKeysSpec: LazyKeysBase ---@field [1] string lhs ----@field [2]? string|fun()|false rhs +---@field [2]? string|fun():string?|false rhs ---@field mode? string|string[] ---@class LazyKeys: LazyKeysBase From 96a205c8cea5476e5a87ed228acf2f221e4eae64 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 19:14:41 +0100 Subject: [PATCH 812/815] chore(main): release 11.17.0 (#1877) :robot: I have created a release *beep* *boop* --- ## [11.17.0](https://github.com/folke/lazy.nvim/compare/v11.16.2...v11.17.0) (2025-02-24) ### Features * **config,render:** allow customizing the debug icon ([#1863](https://github.com/folke/lazy.nvim/issues/1863)) ([a9c660d](https://github.com/folke/lazy.nvim/commit/a9c660d6ef1b396869d3d951760aa7a3dbfe575f)) * **util:** pass lang to `vim.notify` so that snacks notifier can render the ft. Closes [#1919](https://github.com/folke/lazy.nvim/issues/1919) ([c6a57a3](https://github.com/folke/lazy.nvim/commit/c6a57a3534d3494bcc5ff9b0586e141bdb0280eb)) ### Bug Fixes * **config:** add missing space on the default debug icon ([#1879](https://github.com/folke/lazy.nvim/issues/1879)) ([4df5c4d](https://github.com/folke/lazy.nvim/commit/4df5c4d65a3bbf801edd9ec55fb1ae55cfa72dd0)) * **meta:** disable top-level specs before the rest. Closes [#1889](https://github.com/folke/lazy.nvim/issues/1889) ([f81a3fb](https://github.com/folke/lazy.nvim/commit/f81a3fb7feaf460ec7c8c983682b4a693b18fdd4)) * **ui:** do not show virt_lines for messages ([#1904](https://github.com/folke/lazy.nvim/issues/1904)) ([f15a939](https://github.com/folke/lazy.nvim/commit/f15a93907ddad3d9139aea465ae18336d87f5ce6)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 15 +++++++++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index d5dbcb3..e392eaf 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.16.2" + ".": "11.17.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 015288e..d4dde26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [11.17.0](https://github.com/folke/lazy.nvim/compare/v11.16.2...v11.17.0) (2025-02-24) + + +### Features + +* **config,render:** allow customizing the debug icon ([#1863](https://github.com/folke/lazy.nvim/issues/1863)) ([a9c660d](https://github.com/folke/lazy.nvim/commit/a9c660d6ef1b396869d3d951760aa7a3dbfe575f)) +* **util:** pass lang to `vim.notify` so that snacks notifier can render the ft. Closes [#1919](https://github.com/folke/lazy.nvim/issues/1919) ([c6a57a3](https://github.com/folke/lazy.nvim/commit/c6a57a3534d3494bcc5ff9b0586e141bdb0280eb)) + + +### Bug Fixes + +* **config:** add missing space on the default debug icon ([#1879](https://github.com/folke/lazy.nvim/issues/1879)) ([4df5c4d](https://github.com/folke/lazy.nvim/commit/4df5c4d65a3bbf801edd9ec55fb1ae55cfa72dd0)) +* **meta:** disable top-level specs before the rest. Closes [#1889](https://github.com/folke/lazy.nvim/issues/1889) ([f81a3fb](https://github.com/folke/lazy.nvim/commit/f81a3fb7feaf460ec7c8c983682b4a693b18fdd4)) +* **ui:** do not show virt_lines for messages ([#1904](https://github.com/folke/lazy.nvim/issues/1904)) ([f15a939](https://github.com/folke/lazy.nvim/commit/f15a93907ddad3d9139aea465ae18336d87f5ce6)) + ## [11.16.2](https://github.com/folke/lazy.nvim/compare/v11.16.1...v11.16.2) (2024-12-13) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 49339e5..16b5e2c 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -242,7 +242,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.16.2" -- x-release-please-version +M.version = "11.17.0" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy") From 1c9ba3704564a2e34a22191bb89678680ffeb245 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Feb 2025 20:02:30 +0100 Subject: [PATCH 813/815] fix(bootstrap): support for older Neovim versions --- bootstrap.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bootstrap.lua b/bootstrap.lua index 88c1a44..c934c48 100644 --- a/bootstrap.lua +++ b/bootstrap.lua @@ -6,6 +6,7 @@ local M = {} function M.setup() + local uv = vim.uv or vim.loop if vim.env.LAZY_STDPATH then local root = vim.fn.fnamemodify(vim.env.LAZY_STDPATH, ":p"):gsub("[\\/]$", "") for _, name in ipairs({ "config", "data", "state", "cache" }) do @@ -13,12 +14,12 @@ function M.setup() end end - if vim.env.LAZY_PATH and not vim.uv.fs_stat(vim.env.LAZY_PATH) then + if vim.env.LAZY_PATH and not uv.fs_stat(vim.env.LAZY_PATH) then vim.env.LAZY_PATH = nil end local lazypath = vim.env.LAZY_PATH or vim.fn.stdpath("data") .. "/lazy/lazy.nvim" - if not vim.env.LAZY_PATH and not (vim.uv or vim.loop).fs_stat(lazypath) then + if not vim.env.LAZY_PATH and not uv.fs_stat(lazypath) then vim.api.nvim_echo({ { "Cloning lazy.nvim\n\n", From d51cf6978321d659e68a8bc38ee806bd2517a196 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 25 Feb 2025 20:18:25 +0100 Subject: [PATCH 814/815] fix(meta): rebuild dirty right after disable. See #1889 --- lua/lazy/core/meta.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lua/lazy/core/meta.lua b/lua/lazy/core/meta.lua index 0a55656..6fbdfc4 100644 --- a/lua/lazy/core/meta.lua +++ b/lua/lazy/core/meta.lua @@ -314,6 +314,7 @@ function M:fix_disabled() else self:disable(plugin) end + self:rebuild() end end end @@ -321,10 +322,8 @@ function M:fix_disabled() -- disable top-level plugins first, since they may have non-top-level frags -- that disable other plugins check(true) - self:rebuild() -- then disable non-top-level plugins check(false) - self:rebuild() return changes end From 6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 20:19:57 +0100 Subject: [PATCH 815/815] chore(main): release 11.17.1 (#1927) :robot: I have created a release *beep* *boop* --- ## [11.17.1](https://github.com/folke/lazy.nvim/compare/v11.17.0...v11.17.1) (2025-02-25) ### Bug Fixes * **bootstrap:** support for older Neovim versions ([1c9ba37](https://github.com/folke/lazy.nvim/commit/1c9ba3704564a2e34a22191bb89678680ffeb245)) * **meta:** rebuild dirty right after disable. See [#1889](https://github.com/folke/lazy.nvim/issues/1889) ([d51cf69](https://github.com/folke/lazy.nvim/commit/d51cf6978321d659e68a8bc38ee806bd2517a196)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ lua/lazy/core/config.lua | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index e392eaf..dd77c5c 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "11.17.0" + ".": "11.17.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index d4dde26..521777a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [11.17.1](https://github.com/folke/lazy.nvim/compare/v11.17.0...v11.17.1) (2025-02-25) + + +### Bug Fixes + +* **bootstrap:** support for older Neovim versions ([1c9ba37](https://github.com/folke/lazy.nvim/commit/1c9ba3704564a2e34a22191bb89678680ffeb245)) +* **meta:** rebuild dirty right after disable. See [#1889](https://github.com/folke/lazy.nvim/issues/1889) ([d51cf69](https://github.com/folke/lazy.nvim/commit/d51cf6978321d659e68a8bc38ee806bd2517a196)) + ## [11.17.0](https://github.com/folke/lazy.nvim/compare/v11.16.2...v11.17.0) (2025-02-24) diff --git a/lua/lazy/core/config.lua b/lua/lazy/core/config.lua index 16b5e2c..603dd1a 100644 --- a/lua/lazy/core/config.lua +++ b/lua/lazy/core/config.lua @@ -242,7 +242,7 @@ function M.hererocks() return M.options.rocks.hererocks end -M.version = "11.17.0" -- x-release-please-version +M.version = "11.17.1" -- x-release-please-version M.ns = vim.api.nvim_create_namespace("lazy")