LuaLS / LuaLS/lua-language-server

overload type narrowing for returns

Ouverte
#2,933 0 commentaires 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?

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

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 reproduire l’exemple de retour de surcharge dans l’issue et examinez le comportement du language server en matière de vérification des types et de complétion pour l’affinement conditionnel. Le payload ne nomme aucun fichier ni test du dépôt ; localisez donc les points d’entrée pertinents de l’analyse des surcharges et des types de retour avant d’effectuer des modifications. Le travail est terminé lorsque fail est affiné en string après avoir vérifié que resource est nil, sans l’avertissement existant.

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.