LuaLS / lua-language-server

A language server that offers Lua language support - programmed in Lua
https://luals.github.io
MIT License
3.12k stars 289 forks source link

False negative for param-type-mismatch when using a variable as argument #2734

Open bavalpey opened 5 days ago

bavalpey commented 5 days ago

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

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