LuaLS / LuaLS/lua-language-server
Question mark optional syntax not supported in fun() declarations
未關閉
還沒有人認領這個 Issue。
- 主要語言
- 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
Optional value to actually be optional
Actual Behaviour
It's not optional.
This code block should show as Human? and throw warnings for not checking nil. If I manually annotate with ---@param man Human? this works as expected.
The class in question:
---@class Command
---@field info string What the command does.
---@field usage string? How to use the command.
---@field alias string[]? Aliases of the command.
---@field canCall (fun(player: Player): boolean)? Function which checks whether a player can call this command.
---@field call fun(player: Player, human: Human?, args: string[]) Calls the command.
---@field autoComplete fun(args: string[])? Function which manipulates arguments when pressing tab in the terminal.
---@field cooldownTime number? How many seconds a player has to wait before using the command again.
I have also tried with human?: Human and human?: Human? but neither way works.
Reproduction steps
- Create class with a field with a short form function declaration with an optional value parameter
- Attempt to create object of class with that field,
- Parameter correctly types, except as not optional.
Additional Notes
No response
Log File
No response
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
首先在 Visual Studio Code extension 中重現類別欄位範例,重點關注帶有 nullable Human 參數的簡短形式函式宣告。將它與手動加上註解的 ---@param man Human? 情況進行比較;當參數被推斷為選用參數,且如描述所示出現 nil 檢查警告時,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- lua, vscode
- 領域
- devtools
- Issue 類型
- 缺陷
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100