Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

False-positive type error: `vim.cmd` callable table flagged as "table cannot match fun(...)"

Đang mở
#3,272 0 bình luận 1 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
42/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
lua
Lĩnh vực
devtools

Hướng nghiên cứu

Bắt đầu bằng cách tái hiện chẩn đoán với pcall(vim.cmd, "redrawtabline") trong một bộ đệm Lua của Neovim, sau đó theo dõi các chẩn đoán của LuaLS và quá trình suy luận kiểu cho các bảng có thể gọi với metamethod __call. Được xem là hoàn thành khi các bảng có thể gọi được chấp nhận ở nơi yêu cầu các giá trị hàm mà không che giấu các lỗi kiểu thực sự, và bản tái hiện được nêu không còn tạo ra chẩn đoán.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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
  1. In Neovim, open a Lua buffer (e.g., :new | set ft=lua).

  2. 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`
    
  3. Observe the diagnostic from lua-language-server.

  4. 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.

Ngôn ngữ chính
Lua
Star
4.4k
Fork
442
Merge trung bình
8 ngày 9 giờ
Pull request đã merge (30 ngày)
1

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của LuaLS/lua-language-server

Tất cả issue của LuaLS/lua-language-server

Issue tương tự

Thêm issue về Lua

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.