Skip to content

Passing nil as window handle in view.get_winnr #2632

Closed
@usachev63

Description

@usachev63

Description

After #2627, in some cases function view.get_winnr can pass nil to nvim_win_is_valid as a window handle, which causes an error.

I figured out the fix and will provide PR very soon. The issue is to put a clean room example in history.

Neovim version

NVIM v0.10.0-dev
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Run "nvim -V1 -v" for more info

Operating system and version

Linux 5.16.15-051615-generic

Windows variant

No response

nvim-tree version

master

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",
      -- 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 {
    actions = {
      open_file = {
        eject = false,
      },
    },
  }
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. nvim -nu /tmp/nvt-min.lua
  2. :NvimTreeOpen
  3. :q
  4. :NvimTreeOpen

Expected behavior

Tree opens up second time

Actual behavior

Error executing Lua callback: ...e/pack/packer/start/nvim-tree.lua/lua/nvim-tree/view.lua:476: Invalid 'window': Expect
ed Lua number                                                                                                          
stack traceback:                                                                                                       
        [C]: in function 'nvim_win_is_valid'                                                                           
        ...e/pack/packer/start/nvim-tree.lua/lua/nvim-tree/view.lua:476: in function 'get_winnr'                       
        ...e/pack/packer/start/nvim-tree.lua/lua/nvim-tree/view.lua:423: in function 'is_visible'                      
        .../start/nvim-tree.lua/lua/nvim-tree/actions/tree/open.lua:26: in function 'open'                             
        ...ck/packer/start/nvim-tree.lua/lua/nvim-tree/commands.lua:15: in function <...ck/packer/start/nvim-tree.lua/l
ua/nvim-tree/commands.lua:14>                                                                                          

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions