LuaLS / LuaLS/lua-language-server

Support for a bottom type for non-returning functions

Offen
#2,443 1 Kommentar 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?

Windows

What is the issue affecting?

Type Checking

Expected Behaviour

Have a way to tag the return type of a function as Bottom, i.e., never returns.

Actual Behaviour

I have a snippet like this:


local function abort(err)
	io.stderr:write(err .. "\n")
	os.exit(1)
end

local function stuff()
	local chunk = loadfile("x.lua")
	if not chunk then
		abort("failed to loadfile()")
	end
	chunk()
	return {}
end

stuff()

which triggers the "need-nil-check" diagnostic on "chunk()" because it doesn't understand that abort() never returns, so i would like to tag abort() (or better tag os.exit() and do return os.exit) as never returning function.

obvious work-around is to do "return abort(...)" instead, but that messes up the return type of stuff() from table to table|nil. so i have to write abort() return {} to make the type checker happy which is a bit cumbersome

Reproduction steps
  1. Go to '...'
  2. Click '...'
  3. See error '...'
Additional Notes

No response

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 mit dem Type-Checking-Pfad für die Diagnose need-nil-check und den vorhandenen Annotationen für Rückgabetypen von Funktionen. Vergleiche die gewünschte Behandlung von abort und os.exit damit, wie der Checker stuff() nach dem Aufruf ermittelt. Als abgeschlossen gilt, wenn eine Funktion ohne Rückkehr dargestellt werden kann, sodass die nil-Diagnose vermieden wird, ohne nil zum Rückgabetyp von stuff() hinzuzufügen.

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.