LuaLS / LuaLS/lua-language-server
LuaLS processes the wrong LuaDoc for Penlight tablex.filter
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?
Windows
What is the issue affecting?
Libraries
Expected Behaviour
local tablex = require("pl.tablex")
tablex.filter(
{},
function() end -- no linting error
)
Actual Behaviour
local tablex = require("pl.tablex")
tablex.filter(
{},
function() end -- Cannot assign `function` to parameter `"()"|"<"|"<="|"=="|">"...(+5)`. (...)
)
Reproduction steps
- Setup LuaLS and copy example code into a .lua file
- Install Penlight using the Addon Manager
Additional Notes
Here's an extract of the LuaDoc. LuaLS seems to always pick the second definition instead of the first one which has the annotations for using a generic function.
---@generic T, A
---@param t T[]
---@param pred fun(val: T, arg: A): any
---@param arg A
---@return T[]
---@nodiscard
function tablex.filter(t, pred, arg) end
---filter an array's values using a predicate function
---@generic T
---@param t T[] -- a list-like table
---@param pred pl.BoolBinOpString -- a boolean function
---@param arg any -- optional argument to be passed as second argument of the predicate
---@return T[]
---@nodiscard
function tablex.filter(t, pred, arg) end
Log File
I set --loglevel=trace and added the code to an empty file while having tail running on the log but there are no relevant details.
$ tail -f ./file_home_function_git_dragdown-modules.log
[13:59:35.741][debug][#0:script/vm/node.lua:490]: clearNodeCache
[13:59:35.741][trace][#0:script/files.lua:286]: Set text: untitled:Untitled-1 takes 0.00012299999999987 sec.
[13:59:35.741][trace][#0:script/files.lua:695]: Compile State: untitled:Untitled-1
[13:59:35.843][debug][#0:script/provider/provider.lua:1120]: textDocument/semanticTokens/range
[13:59:35.857][debug][#0:script/provider/diagnostic.lua:330]: publishDiagnostics untitled:Untitled-1 2
[13:59:40.272][debug][#0:script/vm/node.lua:490]: clearNodeCache
[13:59:40.273][trace][#0:script/files.lua:286]: Set text: untitled:Untitled-1 takes 0.00021399999999971 sec.
[13:59:40.373][trace][#0:script/files.lua:695]: Compile State: untitled:Untitled-1
[13:59:40.374][debug][#0:script/provider/provider.lua:1120]: textDocument/semanticTokens/range
[13:59:40.381][info] [#0:script/provider/diagnostic.lua:171]: clearDiagnostics untitled:Untitled-1
[13:59:47.118][debug][#0:script/vm/node.lua:490]: clearNodeCache
[13:59:47.118][trace][#0:script/files.lua:286]: Set text: untitled:Untitled-1 takes 0.00020199999999981 sec.
[13:59:47.219][trace][#0:script/files.lua:695]: Compile State: untitled:Untitled-1
[13:59:47.220][debug][#0:script/provider/provider.lua:1120]: textDocument/semanticTokens/range
[13:59:47.232][debug][#0:script/provider/diagnostic.lua:330]: publishDiagnostics untitled:Untitled-1 2
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the diagnostic in VS Code with LuaLS and the Penlight addon, then inspect library/pl/tablex.lua around line 545, especially the two tablex.filter definitions. Trace how LuaLS resolves those definitions and verify the generic overload is selected so the example no longer reports an invalid function argument.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- lua
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100