LuaLS / LuaLS/lua-language-server

Custom __pairs expects only 1 return value

Open
#2,512 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Lua
Stars
4.4k
Forks
442
PR merge metrics
No merged PRs in 30d

Description

### How are you using the lua-language-server?

Visual Studio Code Extension (sumneko.lua)

### Which OS are you using?

Linux

### What is the issue affecting?

Type Checking

### Expected Behaviour

I expected no warnings

### Actual Behaviour

There is a redundant return value warning

### Reproduction steps

Here's an example where string paths are transformed to their package.loaded value

```lua
local imports = {
mod1 = "src.mod1",
mod2 = "src.mod2"
}

return setmetatable({}, {
__pairs = function(_)
local iter = pairs(imports)

local newiter = function (table, index)
local k, path = iter(table, index)

return k, package.loaded[path]
end

--- LuaLS is wrong here
---@diagnostic disable-next-line:redundant-return-value
return newiter, imports, nil
end
})
```

### Additional Notes

https://www.lua.org/pil/7.3.html

### Log File

_No response_

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the warning in the LuaLS Visual Studio Code extension using the provided setmetatable and __pairs example on Linux. Start with the type-checking handling for __pairs and compare it with the Lua 7.3 reference linked in the issue. Done means the example no longer reports a redundant return value warning.

Written by the indexing model from the issue text.

Assessment

Tech stack
lua
Domain
devtools
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.