False-positive type error: `vim.cmd` callable table flagged as "table cannot match fun(...)"
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 42/100
Direção de pesquisa
Comece reproduzindo o diagnóstico com pcall(vim.cmd, "redrawtabline") em um buffer Lua do Neovim e, em seguida, rastreie os diagnósticos do LuaLS e a inferência de tipos para tabelas chamáveis com metamétodos __call. Está concluído quando tabelas chamáveis são aceitas onde valores de função são esperados sem ocultar erros de tipo genuínos, e a reprodução informada não produz mais um diagnóstico.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Lua
- Estrelas
- 4.4k
- Forks
- 442
- Merge médio
- 8d 9h
- PRs com merge (30d)
- 1
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de LuaLS/lua-language-server
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
LuaLS/lua-language-server#1776 ·
-
泛型for迭代器的类型推导漏掉了带__call的类 Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 65/100
LuaLS/lua-language-server#3463 · 5 comentários ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 55/100
LuaLS/lua-language-server#3461 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 68/100
LuaLS/lua-language-server#3460 · 1 comentário · 1 reação ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 68/100
LuaLS/lua-language-server#3459 · 1 reação ·
Todas as issues de LuaLS/lua-language-server
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
HenrikBengtsson/CBI-software#134 ·
-
Nmap
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
secondlife/slua#96 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100