LuaLS / LuaLS/lua-language-server

False negative: Warnings missing for table length mismatch

未关闭
#2,980 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

主要语言
Lua
星标
4.4k
派生
442
PR 合并指标
30 天内没有已合并 PR

描述

How are you using the lua-language-server?

NeoVim

Which OS are you using?

Linux

What is the issue affecting?

Type Checking, Diagnostics/Syntax Checking

Expected Behaviour

In the reproduction code below, f({0}) and f({0, 0, 0}) should issue warnings because they do not match the annotation [integer, integer], which requires a two-element table (tuple).

Actual Behaviour

There are no warnings issued for tables that have an invalid length.

I can see other warnings (e.g., for f("string")), so Neovim and other diagnostics are working correctly.
Screenshot

Reproduction steps

Open a text editor with lua-ls enabled and copy/paste this code.

---@alias Cursor [integer, integer]

---@param c Cursor
local function f(c) end

f("string")

f({ 0 })
f({ 0, 0, 0 })
Additional Notes

I tested with lua-language-server 3.9.1 and 3.13.2 and both have this problem.

Log File

I checked ~/.local/state/nvim/lsp.log since :LspInfo indicates it is the log file, but it was empty.

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从复现代码片段以及 lua-language-server 针对表别名的类型检查和诊断路径入手。将 f("string") 的现有警告与 f({ 0 }) 和 f({ 0, 0, 0 }) 缺失的警告进行比较。当元组注解在表长度不同于所需的两个元素时报告诊断,就算完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
lua
领域
devtools
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。