LuaLS / LuaLS/lua-language-server

overload type narrowing for returns

Offen
#2,933 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Lua
Sterne
4.4k
Forks
442
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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?

Type Checking, Completion

Expected Behaviour

I am not sure this is a duplicate issue considering how common it probably is, but just to make sure.
Possibly a duplicate of https://github.com/LuaLS/lua-language-server/issues/1583.
This is similar to https://github.com/LuaLS/lua-language-server/issues/1146, but with returns instead of params.

It is a common pattern in Lua that on errors you might instead return a nil value to imply failure, along side an error message.

---@return table
---@overload fun(): nil, string
local function fetchX() end

local resource, fail = fetchX()
if not resource then
  print(fail:sub(1, 3)) -- fail type here is expected to be "string"
end
Actual Behaviour

You get a warning on fail that it might possibly be nil. Because its type is string|nil.

---@return table
---@overload fun(): nil, string
local function fetchX() end

local resource, fail = fetchX()
if not resource then
  print(fail:sub(1, 3) )-- fail type here is actually "string|nil"
end
Reproduction steps
  1. Copy the setup code
  2. follow along with the comments
Additional Notes

I believe narrowing down the types in this case is still possible? It seems to me like https://github.com/LuaLS/lua-language-server/issues/1583 was discussing the possibility of adding tuples, but shouldn't this be doable even without tuples support?

Log File

No response

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, das Beispiel zur Rückgabe von Überladungen im Issue zu reproduzieren, und untersuche das Verhalten des Language Servers bei der Typprüfung und Vervollständigung für die bedingte Typ-Eingrenzung. Der Payload nennt keine Dateien oder Tests des Repositorys; ermittle daher vor Änderungen die relevanten Einstiegspunkte für die Analyse von Überladungen und Rückgabetypen. Als erledigt gilt, wenn fail nach der Prüfung, dass resource nil ist, auf string eingegrenzt wird, ohne die bestehende Warnung.

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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.