LuaLS / LuaLS/lua-language-server
Optional not removed in if/elseif block for field in filter
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
Expected Behaviour
---@type { n: number? }
local t = { n = 1 }
if t.n then
_ = t.n -- (field) t.n: number
else
_ = t.n -- (field) t.n: number?
end
Actual Behaviour
---@type number?
local n = 0
if n then
_ = n -- local t: number
else
_ = n -- local t: nil
end
-- but
---@type { n: number? }
local t = { n = 1 }
if t.n then
_ = t.n -- (field) t.n: number? !!!
else
_ = t.n -- (field) t.n: number?
end
Additional Notes
I couldn't immediately understand where exactly this type casting is happening
Looks like here
https://github.com/LuaLS/lua-language-server/blob/34ff9d3ca730bc28879ab2b0c1a49f2c5480f9a3/script/vm/tracer.lua#L240-L243
but adding debug log nothing came out
I would be grateful for the information, I could try to fix it myself
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez les deux exemples de narrowing dans l’extension Visual Studio Code, puis examinez script/vm/tracer.lua autour des lignes 240-243, l’emplacement mentionné dans l’issue. Le travail est terminé lorsque l’accès au champ t.n est réduit à number dans la branche if, tout en restant number? dans la branche else, conformément au comportement des variables locales.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- lua
- Domaine
- devtools
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100