LuaLS / LuaLS/lua-language-server
@generic 不验证类型是否一致
オープン
まだ誰も着手していません。
- 主要言語
- 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
假设有这样的代码:
---@class TestBase
---@class TestDerived1 : TestBase
---@class TestDerived2 : TestBase
---@generic T:TestBase
---@param v1 T
---@param v2 T
local function foo(v1, v2) end
我给 foo 的 v1, v2 标注了同一个 T,因此期望它们类型是一致的
local t1 ---@type TestDerived1
local t2 ---@type TestDerived2
foo(t1, t2)
这应该报错
Actual Behaviour
可实际上没有。因为泛型只对每一个参数进行独立的多态类型检查,都继承同一个父类自然没有报错。
当然,同一个泛型的一致性是完全一致还是多态一致,可以归结为一种设计考虑。当前的逻辑也许不算太坏。
但是,如果再加上返回值,结果就会变得很奇怪。
返回值同样是 T,可是却变成第一个参数的类型了!无论从哪个角度想都不合理。
Reproduction steps
复制上述代码查看悬停类型提示即可
Additional Notes
建议:
校验由 @generic 标注的同一个泛型必须是同一类型
或者:在类型不同时不要推断为第一个类型而是基类类型
Log File
No response
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
ソースファイルもテストも指定されていません。提供された Lua スニペットで問題を再現し、ジェネリック型チェックと戻り値型推論の経路を調査してから、1つのジェネリックパラメーターが複数の引数にわたってどのように束縛されるかを追跡してください。選択した同一型の動作が診断と hover 結果に一貫して反映され、プロジェクトに適用可能なテストの場所がある場合は回帰テストのカバレッジも追加されていれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- lua
- 領域
- devtools
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 活発
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100