nvim-tree / nvim-tree.lua

A file explorer tree for neovim written in lua

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Incompatibility with fugitive and oil.nvim and other plugins

pedro757 opened this issue · comments

Description

Error detected while processing BufEnter Autocommands for "*":                                                                                                                                               
Error executing lua callback: ...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:151: bad argument #1 to 'fs_stat' (string expected, got nil)                                                       
stack traceback:                                                                                                                                                                                             
        [C]: in function 'fs_stat'                                                                                                                                                                           
        ...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:151: in function 'get_toplevel'                                                                                                          
        ...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:222: in function 'load_project_status'                                                                                                   
        .../nvim/lazy/nvim-tree.lua/lua/nvim-tree/explorer/init.lua:38: in function '_load'                                                                                                                  
        .../nvim/lazy/nvim-tree.lua/lua/nvim-tree/explorer/init.lua:30: in function 'new'                                                                                                                    
        ...cal/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/core.lua:20: in function 'init'                                                                                                                   
        .../nvim-tree.lua/lua/nvim-tree/actions/root/change-dir.lua:88: in function 'f'                                                                                                                      
        .../nvim-tree.lua/lua/nvim-tree/actions/root/change-dir.lua:77: in function 'force_dirchange'                                                                                                        
        ...o/.local/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree.lua:104: in function <...o/.local/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree.lua:92>

Neovim version

NVIM v0.10.0-dev-2507+g3df1211eb
Build type: RelWithDebInfo
LuaJIT 2.1.1707061634
Run "nvim -V1 -v" for more info

Operating system and version

Linux 6.1.77-2

Windows variant

No response

nvim-tree version

efafd73

Clean room replication

vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1

vim.cmd [[set runtimepath=$VIMRUNTIME]]
vim.cmd [[set packpath=/tmp/nvt-min/site]]
local package_root = "/tmp/nvt-min/site/pack"
local install_path = package_root .. "/packer/start/packer.nvim"
local function load_plugins()
  require("packer").startup {
    {
      "wbthomason/packer.nvim",
      "nvim-tree/nvim-tree.lua",
      "nvim-tree/nvim-web-devicons",
      "tpope/vim-fugitive",
      "stevearc/oil.nvim",
      -- ADD PLUGINS THAT ARE _NECESSARY_ FOR REPRODUCING THE ISSUE
    },
    config = {
      package_root = package_root,
      compile_path = install_path .. "/plugin/packer_compiled.lua",
      display = { non_interactive = true },
    },
  }
end
if vim.fn.isdirectory(install_path) == 0 then
  print "Installing nvim-tree and dependencies."
  vim.fn.system { "git", "clone", "--depth=1", "https://github.com/wbthomason/packer.nvim", install_path }
end
load_plugins()
require("packer").sync()
vim.cmd [[autocmd User PackerComplete ++once echo "Ready!" | lua setup()]]
vim.opt.termguicolors = true
vim.opt.cursorline = true

-- MODIFY NVIM-TREE SETTINGS THAT ARE _NECESSARY_ FOR REPRODUCING THE ISSUE
_G.setup = function()
  require("nvim-tree").setup {}
  require("oil").setup()
end

-- UNCOMMENT this block for diagnostics issues, substituting pattern and cmd as appropriate.
-- Requires diagnostics.enable = true in setup.
--[[
vim.api.nvim_create_autocmd("FileType", {
  pattern = "lua",
  callback = function()
    vim.lsp.start { cmd = { "lua-language-server" } }
  end,
})
]]

Steps to reproduce

  1. Run :G or :Oil

Expected behavior

Not to error

Actual behavior

Error detected while processing BufEnter Autocommands for "*":                                                                                                                                               
Error executing lua callback: ...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:151: bad argument #1 to 'fs_stat' (string expected, got nil)                                                       
stack traceback:                                                                                                                                                                                             
        [C]: in function 'fs_stat'                                                                                                                                                                           
        ...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:151: in function 'get_toplevel'                                                                                                          
        ...share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/git/init.lua:222: in function 'load_project_status'                                                                                                   
        .../nvim/lazy/nvim-tree.lua/lua/nvim-tree/explorer/init.lua:38: in function '_load'                                                                                                                  
        .../nvim/lazy/nvim-tree.lua/lua/nvim-tree/explorer/init.lua:30: in function 'new'                                                                                                                    
        ...cal/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree/core.lua:20: in function 'init'                                                                                                                   
        .../nvim-tree.lua/lua/nvim-tree/actions/root/change-dir.lua:88: in function 'f'                                                                                                                      
        .../nvim-tree.lua/lua/nvim-tree/actions/root/change-dir.lua:77: in function 'force_dirchange'                                                                                                        
        ...o/.local/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree.lua:104: in function <...o/.local/share/nvim/lazy/nvim-tree.lua/lua/nvim-tree.lua:92>

Unfortunately I can't reproduce this one with the clean room above, with :Oil or :G

I'm a fugitive user however I haven't seen this one before.

I do note that the stack contains lazy - is that the lazy plugin manager? I'm not seeing that in the replication config...
Can you reproduce without lazy?

I deleted oil:/ and fugitive:/ directories and now works fine, no idea why it works now, thank you

Those directories apparently appear when saving a special buffer of fugitive or oil.nvim https://www.reddit.com/r/vim/comments/17vpwyw/where_do_the_fugitive_folders_come_from_and_how/

I wasn't able to reproduce however the issue is clear. A guard has been added for this case #2696

@pedro757 I'd be most grateful if you reproduced the issue then tested the fix:

cd /path/to/nvim-tree.lua
git pull
git checkout origin/2695-git-toplevel-guard-invalid-path

When you're finished testing:

git checkout master

Sorry it was my fault, I had this autocommand, that created those directories (oil: and fugitive:) on save.

 vim.api.nvim_create_autocmd("BufWritePre", {
   callback = function()
+    if vim.o.filetype == "oil" or vim.o.filetype == "fugitive" then
+      return
+    end
     local dir = vim.fn.expand "<afile>:p:h"
     if vim.fn.isdirectory(dir) == 0 then
       vim.fn.mkdir(dir, "p")
     end
   end,
 })

Just added those lines to prevent that, thank you