-
-
Notifications
You must be signed in to change notification settings - Fork 383
Description
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 likevim.cmd("redrawtabline")
work at runtime. The false-positive only appears when passingvim.cmd
as a function value (e.g., topcall
). -
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.