LuaLS / LuaLS/lua-language-server

`repeat…until val ~= nil` should satisfy the need for nil checks

Offen
#2,531 0 Kommentare 3 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

I have some code where I have to wait for a forked process to create a file and I can't get feedback over its return status or stdout, so I use a polling pattern similar to this:

```lua
local val = nil

-- kick off the external process
fork_process(...)

repeat
val = check_for_val(...)
until val ~= nil

val:foo()
```

In this current form, I get a diagnostic that says I need to perform a nil check on `val` before calling `foo`, but the loop condition here should be considered the nil check.

This already works for `while val == nil do...end` so it would be nice to see it for `repeat...until val~= nil` as well.

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

Das Issue nennt keine Quelldatei und keinen Test; beginne damit, die Flow-Analysis-Logik zu finden, die Nil-Prüfungen für while-Schleifen und repeat…until-Bedingungen verarbeitet. Reproduziere das Polling-Beispiel und vergleiche seine Diagnose mit dem bestehenden Verhalten von while val == nil; fertig ist die Arbeit, wenn val:foo() nach repeat…until val ~= nil keine zusätzliche Nil-Prüfung mehr erfordert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
lua
Bereich
devtools
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

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