How are you using the lua-language-server?
NeoVim
Which OS are you using?
Linux
What is the issue affecting?
Diagnostics/Syntax Checking
Expected Behaviour
lua-language-server should recognize callable tables (with a __call metamethod) as valid function values. Passing Neovim’s vim.cmd to pcall should not raise a type error.
Actual Behaviour
lua-language-server reports a false-positive type error when vim.cmd (a callable table in Neovim) is passed to pcall:
Cannot assign table to parameter fun(...):...unknown
Type table cannot match fun(...):...unknown
Reproduction steps
-
In Neovim, open a Lua buffer (e.g., :new | set ft=lua).
-
Insert the following code:
-- Works at runtime, but LuaLS flags the next line:
pcall(vim.cmd, "redrawtabline")
-- Diagnostic shown by LuaLS:
-- Cannot assign `table` to parameter `fun(...):...unknown`
-
Observe the diagnostic from lua-language-server.
-
Execute the code in Neovim (e.g., :luafile %) to confirm it runs without runtime errors.
Additional Notes
-
vim.cmd is a callable table provided by Neovim (implemented via __call metamethod). Direct calls like vim.cmd("redrawtabline") work at runtime. The false-positive only appears when passing vim.cmd as a function value (e.g., to pcall).
-
Workarounds:
-- Wrap in a function
pcall(function() vim.cmd("redrawtabline") end)
-- or use the typed API
pcall(vim.api.nvim_cmd, { cmd = "redrawtabline" }, {})
-
Please treat callable tables as functions for the purpose of type checking / inference.
How are you using the lua-language-server?
NeoVim
Which OS are you using?
Linux
What is the issue affecting?
Diagnostics/Syntax Checking
Expected Behaviour
lua-language-server should recognize callable tables (with a
__callmetamethod) as valid function values. Passing Neovim’svim.cmdtopcallshould not raise a type error.Actual Behaviour
lua-language-server reports a false-positive type error when
vim.cmd(a callable table in Neovim) is passed topcall:Cannot assign
tableto parameterfun(...):...unknownType
tablecannot matchfun(...):...unknownReproduction steps
In Neovim, open a Lua buffer (e.g.,
:new | set ft=lua).Insert the following code:
Observe the diagnostic from lua-language-server.
Execute the code in Neovim (e.g.,
:luafile %) to confirm it runs without runtime errors.Additional Notes
vim.cmdis a callable table provided by Neovim (implemented via__callmetamethod). Direct calls likevim.cmd("redrawtabline")work at runtime. The false-positive only appears when passingvim.cmdas a function value (e.g., topcall).Workarounds:
Please treat callable tables as functions for the purpose of type checking / inference.