LuaLS / LuaLS/lua-language-server
Type inferencing of filter style functions
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Lua
- Sterne
- 4.4k
- Forks
- 442
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Given:
---@generic T
---@param f fun(a: T)
---@param t table<any, T>
---@return T[] (table)
local function tbl_filter(f, t)
return t
end
---@type string[]
local s = {'a', 'b', 'c'}
local r1 = tbl_filter(function(a) end, s)
r1 is inferred as unknown[] because a is unknown despite s being known. However, could we infer a from s and force the typechecker to insist a is a string?
If I remove the type from a:
---@generic T
---@param f fun(a)
---@param t table<any, T>
---@return T[] (table)
local function tbl_filter2(f, t)
return t
end
local r2 = tbl_filter2(function(_) end, s)
r2 is now inferred as string[] because only s is used to infer the type.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, die beiden tbl_filter-Beispiele aus dem Issue zu reproduzieren, und vergleiche die inferierten Callback-Parameter- und Ergebnistypen. Verfolge die Einstiegspunkte des Language Servers für generic-function und callback type-inference; abgeschlossen ist die Aufgabe, wenn der erste Callback-Parameter aus s als string inferiert wird, r1 den Typ string[] hat und inkompatible Callback-Typen abgelehnt werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- lua
- Bereich
- devtools
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100