packer.nvim
packer.nvim copied to clipboard
Dependency of a plugin with an lazy-load keyword is installed in the `start/` folder
-
nvim --version
: NVIM v0.6.1 -
git --version
: git version 2.34.0 - Operating system/version: Solus Linux
- Terminal name/version: Alacritty
Steps to reproduce
This is the minimum setup for packer.nvim
:
require('packer').startup(
function(use)
use {'wbthomason/packer.nvim'}
use {
"b0o/schemastore.nvim",
ft = {"json"},
requires = {"vim-test/vim-test"}
}
end
)
Here I set the filetype to load schemastore.nvim
to be json
, so schemastore.nvim
is installed in opt
. vim-test
is a dependency of an optional plugin, so it should also go to opt/
according to the README
(the default value of transitive_opt
is true.
Actual behaviour
vim-test
is installed in pack/packer/start
.
Expected behaviour
vim-test
should be installed in pack/packer/opt
Post the contents of packer_compiled.vim
here
-- Automatically generated packer.nvim plugin loader code
if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then
vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"')
return
end
vim.api.nvim_command('packadd packer.nvim')
local no_errors, error_msg = pcall(function()
local time
local profile_info
local should_profile = false
if should_profile then
local hrtime = vim.loop.hrtime
profile_info = {}
time = function(chunk, start)
if start then
profile_info[chunk] = hrtime()
else
profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6
end
end
else
time = function(chunk, start) end
end
local function save_profiles(threshold)
local sorted_times = {}
for chunk_name, time_taken in pairs(profile_info) do
sorted_times[#sorted_times + 1] = {chunk_name, time_taken}
end
table.sort(sorted_times, function(a, b) return a[2] > b[2] end)
local results = {}
for i, elem in ipairs(sorted_times) do
if not threshold or threshold and elem[2] > threshold then
results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms'
end
end
_G._packer = _G._packer or {}
_G._packer.profile_output = results
end
ime([[Luarocks path setup]], true)
local package_path_str = "/home/oulongwu/.cache/nvim/packer_hererocks/2.0.5/share/lua/5.1/?.lua;/home/oulongwu/.cache/nvim/packer_hererocks/2.0.5/share/lua/5. 1/?/init.lua;/home/oulongwu/.cache/nvim/packer_hererocks/2.0.5/lib/luarocks/rocks-5.1/?.lua;/home/oulongwu/.cache/nvim/packer_hererocks/2.0.5/lib/luarocks/ rocks-5.1/?/init.lua"
local install_cpath_pattern = "/home/oulongwu/.cache/nvim/packer_hererocks/2.0.5/lib/lua/5.1/?.so"
if not string.find(package.path, package_path_str, 1, true) then
package.path = package.path .. ';' .. package_path_str
end
if not string.find(package.cpath, install_cpath_pattern, 1, true) then
package.cpath = package.cpath .. ';' .. install_cpath_pattern
end
time([[Luarocks path setup]], false)
time([[try_loadstring definition]], true)
local function try_loadstring(s, component, name)
local success, result = pcall(loadstring(s), name, _G.packer_plugins[name])
if not success then
vim.schedule(function()
vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {})
end)
end
return result
end
time([[try_loadstring definition]], false)
time([[Defining packer_plugins]], true)
_G.packer_plugins = {
["packer.nvim"] = {
loaded = true,
path = "/home/oulongwu/.local/share/nvim/site/pack/packer/start/packer.nvim",
url = "https://github.com/wbthomason/packer.nvim"
},
["schemastore.nvim"] = {
loaded = false,
needs_bufread = false,
only_cond = false,
path = "/home/oulongwu/.local/share/nvim/site/pack/packer/opt/schemastore.nvim",
url = "https://github.com/b0o/schemastore.nvim"
},
["vim-test"] = {
loaded = true,
path = "/home/oulongwu/.local/share/nvim/site/pack/packer/start/vim-test",
url = "https://github.com/vim-test/vim-test"
}
}
time([[Defining packer_plugins]], false)
vim.cmd [[augroup packer_load_aucmds]]
vim.cmd [[au!]]
-- Filetype lazy-loads
time([[Defining lazy-load filetype autocommands]], true)
vim.cmd [[au FileType json ++once lua require("packer.load")({'schemastore.nvim'}, { ft = "json" }, _G.packer_plugins)]]
time([[Defining lazy-load filetype autocommands]], false)
vim.cmd("augroup END")
if should_profile then save_profiles() end
end)
if not no_errors then
vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None')
end
Can confirm this bug
Thanks for your report! I think this is a README bug - requires
does not currently affect load order, just ensures that dependencies get installed. transitive_opt
applies if you manually mark a plugin opt
, but I forget why we didn't make this apply to all opt
plugins...
I changed the behavior from all opt
to just manual here: https://github.com/wbthomason/packer.nvim/commit/a542f34fa050ab56515cbb513393cd03d961bb85
We can investigate reverting that change and fixing the bugs it may cause, or I can fix the docs.
Thanks for your report! I think this is a README bug -
requires
does not currently affect load order, just ensures that dependencies get installed.transitive_opt
applies if you manually mark a pluginopt
, but I forget why we didn't make this apply to allopt
plugins...
Thanks for your explanation! It will be helpful if you can include the condition where transitive_opt
is applied in README.
May or may not fit here: I have the kind of opposite problem - likely caused by this transitivie_opt
option.
require('packer').startup({function(use)
use 'wbthomason/packer.nvim'
use { 'nvim-telescope/telescope.nvim', opt = true, cmd = 'Telescope', requires = { 'nvim-lua/plenary.nvim' } }
use { 'lewis6991/gitsigns.nvim', requires = { 'nvim-lua/plenary.nvim' } }
end})
Here plenary is inside opt/ but should be inside start/. However - when reversing the order of use statements it works as expected.