LuaLS / LuaLS/lua-language-server
When using alias values as its keys, Dictionary types don't give completion when defining an instance of that dictionary
還沒有人認領這個 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?
Linux
What is the issue affecting?
Completion
Expected Behaviour
When trying to define a table annotated with ---@type {[an_alias]: a_type}, beginning to type a key in the table brings up an_alias's values for automatic completion.
Actual Behaviour
When trying to define a table annotated with ---@type {[an_alias]: a_type}, beginning to type a key in the table will not bring up an_alias's values.
Reproduction steps
Enter the following:
---@alias Flavor
---| "sweet"
---| "spicy"
---| "tangy"
---| "juicy"
---| "tough"
---| "gummy"
---@type {[Flavor]: number}
local test = {
}
Try typing "s" into the empty line in the test table, and it should be able to tell that you'd like to type sweet or spicy because those are members of the Flavor alias, but it does not. It recognizes those words as words found elsewhere in the document and will display them in the autocompletion dropdown as such (below other words found elsewhere in the document that also start with "s"), as shown in this screenshot of a larger file:
This might not be the best of examples because there are no other words that start with "s" in the code, but hopefully the issue is still clear. Adding other things (defining variables, using strings, what not) that start with "s" into the example code will give a result like my screenshot.
Additional Notes
I've tried to make this work with the ---@class annotation, and it behaves how I'd expect (the autocompletion dropdown's first results are field names on that class), but it brings up another issue: I'm trying to iterate through an instance of the class, and I don't get the correct return types when using functions like pairs. That makes sense to me - an object is probably not meant to be iterated through, because it likely has fields of different types.
I'm running into this issue because I'm trying to define a dictionary, i.e. a collection of fields that do have the same type. I know all of the names of the fields beforehand, and I define them in an alias. It seems to me that the language server should be able to recognize when I begin typing one of the alias's values in a table that's being defined as a dictionary with that alias as its keys.
Log File
No response
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
首先,使用 issue 中所示的 Flavor 別名和 ---@type {[Flavor]: number} 表格重現補全行為。追蹤帶有註解的字典表格中鍵的補全進入點,並將其與類別欄位補全進行比較;輸入鍵時,別名值(例如 sweet 和 spicy)會被優先處理,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- lua
- 領域
- tooling
- Issue 類型
- 缺陷
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 45/100