LuaLS / LuaLS/lua-language-server
False-positive type error: `vim.cmd` callable table flagged as "table cannot match fun(...)"
Personne n'a encore pris cette issue.
- Langage dominant
- Lua
- Étoiles
- 4.4k
- Forks
- 442
- Métriques de merge des PR
- Aucune PR mergée en 30 j
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.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:
-- 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.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire le diagnostic avec pcall(vim.cmd, "redrawtabline") dans un tampon Lua de Neovim, puis suivez les diagnostics de LuaLS et l’inférence de types pour les tables appelables dotées de métaméthodes __call. Le travail est considéré comme terminé lorsque les tables appelables sont acceptées là où des valeurs de fonction sont attendues sans masquer les véritables erreurs de type, et que la reproduction indiquée ne produit plus de diagnostic.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- lua
- Domaine
- devtools
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100