LuaLS / LuaLS/lua-language-server

Support for a bottom type for non-returning functions

Ouverte
#2,443 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Lua
Étoiles
4.4k
Forks
442
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

### 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_

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par le chemin de vérification des types pour le diagnostic `need-nil-check` et par les annotations de type de retour de fonction existantes. Comparez le traitement demandé pour `abort` et `os.exit` avec la manière dont le checker infère `stuff()` après l’appel. Le travail est terminé lorsqu’une fonction qui ne retourne pas peut être représentée de façon à éviter le diagnostic nil sans ajouter nil au type de retour de `stuff()`.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
lua
Domaine
devtools
Type d'issue
Fonctionnalité
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.