LuaLS / LuaLS/lua-language-server
Overload type narrowing based on number of arguments instead of argument-type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Lua
- Sterne
- 4.4k
- Forks
- 442
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
With the following code:
---@overload fun(param1: "test", param2: string)
---@overload fun(param1: "test2", param2: number)
---@overload fun(param1: "test3", param2: boolean, param3: number)
local function test(...)
end
test("test", "string"); ---expected: good, actual: good
test("test2", 1); ---expected: good, actual: good
test("test3", true, 1); ---expected: good, actual: good
test("test", 1); ---expected: bad, actual: good
test("test2", "string"); ---expected: bad, actual: good
test("test", true, 2) ---expected: bad, actual: bad
test("test3", "string"); ---expected: bad, actual: bad
test("test3", "string", 1); ---expected: bad, actual: bad
test("test3", true); ---expected: bad, actual: bad
I get the following errors:
With these overloads I would of expected the type to be equivalent to this:
{
param1: "test"
param2: string
} | {
param1: "test2"
param2: number
} | {
param1: "test3"
param2: boolean
param3: number
}
However, it is actually equivalent to:
{
param1: "test" | "test2"
param2: string | number
} |
{
param1: "test3"
param2: boolean
param3: number
}
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, das im Issue enthaltene Overload-Beispiel zu reproduzieren, und verfolge den Type-Checking-Pfad des Language Servers für Aufrufe überladener Funktionen. Die Behebung ist vollständig, wenn Argumenttypen Overloads ebenso wie die Anzahl der Argumente einschränken und die drei gültigen Aufrufe akzeptiert sowie die gezeigten nicht übereinstimmenden Aufrufe abgelehnt werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- lua
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100