LuaLS / LuaLS/lua-language-server
False negative for param-type-mismatch when using a variable as argument
まだ誰も着手していません。
- 主要言語
- Lua
- スター
- 4.4k
- フォーク
- 442
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
How are you using the lua-language-server?
Visual Studio Code Extension (sumneko.lua)
Which OS are you using?
Windows
What is the issue affecting?
Type Checking
Expected Behaviour
---@class (exact) Foo
---@field FooField integer
local Foo
---@param FooParam Foo
local function test(FooParam) end
local x = {z = 1}
test(x)
test({z = 1})
In the example above, Lua LS should report a param-type-mismatch diagnostic for test(x). It has enough information to know that x cannot be of type Foo, at the very least because it is missing FooField.
We see that test({z=1}) correctly reports the param-type-mismatch diagnostic.
Actual Behaviour
No error is reported.
Reproduction steps
In any editor with Lua LS installed, write the provided code. Observe that there are no squiggles reported.
Additional Notes
I would say this is a pretty serious bug. I would have expected Lua LS's type checking to be robust enough to handle checking the types of variables. It seems that all it is doing is checking that the type is a table.
IS this because there is no narrowing of variables once they become tables? This is only done for table literals?
Log File
No response
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
Lua LS に用意されている Lua の再現コードから始め、変数引数とテーブルリテラルを比較しながら、test に渡されるパラメーターの型チェック経路を追跡してください。test(x) に対して同じ param-type-mismatch 診断が報告され、FooField が欠落しているケースも含まれていれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- lua
- 領域
- devtools
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 42/100