wbthomason / packer.nvim

A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config
MIT License
7.72k stars 263 forks source link

Running :PackerSync with vimtex causes neovim to crash #1240

Open dsoto1219 opened 1 year ago

dsoto1219 commented 1 year ago

Steps to reproduce

  1. When setting up packer, install any plugins you want that are not VimTex. Here is my specific setup I have in my plugins.lua file, while is required by my init.lua:

    
    return packer.startup(function(use)
    
    use "wbthomason/packer.nvim"
    use "nvim-lua/popup.nvim"
    use "nvim-lua/plenary.nvim"
    -- use 'lervag/vimtex'

end)

2. Run `:PackerSync`. This should behave as normal. If using the specific plugins I have from before, packer should install/update each of the 3 plugins without issue.
3. Add in the line `use 'lervag/vimtex'` to the packer.startup function:

return packer.startup(function(use)

use "wbthomason/packer.nvim"
use "nvim-lua/popup.nvim"
use "nvim-lua/plenary.nvim"
use 'lervag/vimtex'

end)

4. Run `:PackerSync`. This time, each plugin should load to 100% and then turn to a checkmark, except for VimTex. VimTex should only load to 100%, without a checkmark. Before it gets a chance to turn to a checkmark, neovim should crash, and you should be met with the powershell cli interface.

### Actual behaviour
Neovim crashes.

### Expected behaviour
Neovim would continue to run after the command `:PackerSync` is run.

### packer files

<details>
<summary>Plugin specification file(s)</summary>

local fn = vim.fn

-- Automatically install packer local install_path = fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim/" if fn.empty(fn.glob(install_path)) > 0 then PACKER_BOOTSTRAP = fn.system { "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path, } print("Installing packer, close and reopen Neovim ...") vim.cmd [[packadd packer.nvim]] end

-- Autocommand that reloads neovim whenever you save the plugins.lua file vim.cmd([[ augroup packer_user_config autocmd! autocmd BufWritePost plugins.lua source | PackerSync augroup end ]])

-- Use a protected call so we don't error out on first use local status_ok, packer = pcall(require, "packer") if not status_ok then return end

-- Have packer use a popup window packer.init { display = { open_fn = function() return require("packer.util").float { border = "rounded" } end, } }

-- Plugins List return packer.startup(function(use)

use "wbthomason/packer.nvim"
use "nvim-lua/popup.nvim"
use "nvim-lua/plenary.nvim"

-- cmp
use 'hrsh7th/nvim-cmp'
use 'hrsh7th/cmp-buffer'
use 'hrsh7th/cmp-path'
use 'hrsh7th/cmp-cmdline'

-- snippets
use 'L3MON4D3/LuaSnip'
use 'rafamadriz/friendly-snippets'

if PACKER_BOOTSTRAP then
    require("packer").sync()
end

end)


</details>

<details>
<summary>packer log file</summary>

Post the contents of ~/.cache/nvim/packer.nvim.log here <- That file does not exist for me, but there are files within a ~/.cache/vimtex/ directory: capture.json, nvim_servernames.json.

</details>

<details>
<summary>packer compiled file</summary>

-- 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()

_G._packer = _G._packer or {} _G._packer.inside_compile = true

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 if threshold then table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') end

_G._packer.profile_output = results end

time([[Luarocks path setup]], true) local package_path_str = "C:\Users\danim\AppData\Local\Temp\nvim\packer_hererocks\2.1.0-beta3\share\lua\5.1\?.lua;C:\Users\danim\AppData\Local\Temp\nvim\packer_hererocks\2.1.0-beta3\share\lua\5.1\?\init.lua;C:\Users\danim\AppData\Local\Temp\nvim\packer_hererocks\2.1.0-beta3\lib\luarocks\rocks-5.1\?.lua;C:\Users\danim\AppData\Local\Temp\nvim\packer_hererocks\2.1.0-beta3\lib\luarocks\rocks-5.1\?\init.lua" local install_cpath_pattern = "C:\Users\danim\AppData\Local\Temp\nvim\packer_hererocks\2.1.0-beta3\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 = { LuaSnip = { loaded = true, path = "C:\Users\danim\AppData\Local\nvim-data\site\pack\packer\start\LuaSnip", url = "https://github.com/L3MON4D3/LuaSnip" }, ["cmp-buffer"] = { loaded = true, path = "C:\Users\danim\AppData\Local\nvim-data\site\pack\packer\start\cmp-buffer", url = "https://github.com/hrsh7th/cmp-buffer" }, ["cmp-cmdline"] = { loaded = true, path = "C:\Users\danim\AppData\Local\nvim-data\site\pack\packer\start\cmp-cmdline", url = "https://github.com/hrsh7th/cmp-cmdline" }, ["cmp-path"] = { loaded = true, path = "C:\Users\danim\AppData\Local\nvim-data\site\pack\packer\start\cmp-path", url = "https://github.com/hrsh7th/cmp-path" }, ["friendly-snippets"] = { loaded = true, path = "C:\Users\danim\AppData\Local\nvim-data\site\pack\packer\start\friendly-snippets", url = "https://github.com/rafamadriz/friendly-snippets" }, ["nvim-cmp"] = { loaded = true, path = "C:\Users\danim\AppData\Local\nvim-data\site\pack\packer\start\nvim-cmp", url = "https://github.com/hrsh7th/nvim-cmp" }, ["packer.nvim"] = { loaded = true, path = "C:\Users\danim\AppData\Local\nvim-data\site\pack\packer\start\packer.nvim", url = "https://github.com/wbthomason/packer.nvim" }, ["plenary.nvim"] = { loaded = true, path = "C:\Users\danim\AppData\Local\nvim-data\site\pack\packer\start\plenary.nvim", url = "https://github.com/nvim-lua/plenary.nvim" }, ["popup.nvim"] = { loaded = true, path = "C:\Users\danim\AppData\Local\nvim-data\site\pack\packer\start\popup.nvim", url = "https://github.com/nvim-lua/popup.nvim" } }

time([[Defining packer_plugins]], false)

_G._packer.inside_compile = false if _G._packer.needs_bufread == true then vim.cmd("doautocmd BufRead") end _G._packer.needs_bufread = false

if should_profile then save_profiles() end

end)

if not no_errors then error_msg = error_msg:gsub('"', '\"') vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') end



</details>
dsoto1219 commented 1 year ago

Update. I deleted and reinstalled Neovim in order to reproduce the issue. Here's what I did:

  1. Ensured that there is no:
    • ".cache/" directory in the ~/ directory, and no
    • "nvim/" or "nvim-data/" directory in %localappdata%.
  2. Installed Neovim in Powershell 7.3.4 using winget install Neovim.Neovim (I previously uninstalled Neovim using the same command, but replacing install with uninstall).
  3. Created nvim/ directory, created an init.lua file inside of it that contains the line require("user.plugins"), and saved that file with :w.
  4. Ran the command :Ex, created a lua/ directory, created a user/ directory inside lua/, and inside the user/ directory I created a plugins.lua file.
  5. Inside the plugins.lua file, I included the following code:
    return require('packer').startup(function(use)
    use 'wbthomason/packer.nvim'
    end)

    Then ran :wq.

  6. In my powershell terminal, I ran git clone https://github.com/wbthomason/packer.nvim "$env:LOCALAPPDATA\nvim-data\site\pack\packer\start\packer.nvim".
  7. Going back to my plugins.lua file, I ran :PackerSync, and packer was successfully installed.
  8. I modified the plugins.lua file to include use 'lervag/vimtex':
    return require('packer').startup(function(use)
    use 'wbthomason/packer.nvim'
        use 'lervag/vimtex'
    end)

    then saved and sourced the file.

  9. I ran :PackerSync. Packer updated, vimtex installed up to 100%, but then neovim crashed and I was met with the pwsh cli.

I have deleted and reinstalled Neovim multiple times before this both to test this issue and for separate issues, and each time--although the tests I performed weren't as structured as this one--vimtex seemed to be the culprit plugin.

I initially posted this as an issue in the vimtex repo, but lervag himself told me to submit the issue here.