LuaLS / LuaLS/lua-language-server
`need-check-nil` doesn't recognize nil check propagation
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Lua
- Estrellas
- 4.4k
- Forks
- 442
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
How are you using the lua-language-server?
Visual Studio Code Extension (sumneko.lua)
Which OS are you using?
MacOS
What is the issue affecting?
Diagnostics/Syntax Checking
Expected Behaviour
Ideally, need-check-nil would infer a nil check has been completed if I've already done that nil check earlier as part of a larger check. Specifically, the statement if not (a and a.b) then will properly register as a nil check on a, but assigning the inner expression to a local var prevents LLS from detecting it as a nil check.
Actual Behaviour
LLS warns need-check-nil when a variable cannot possibly be nil, if the check was masked via another variable.
Reproduction steps
---@return table?
local function stuff()
return nil
end
local item = stuff()
local x = item and item.x
if not x then -- Works: `if not (item and item.x) then`
-- This includes case where `item` is `nil`
else
local subitem = item.key -- Error on `item` (need-check-nil)
end
Additional Notes
No response
Log File
No response
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza reproduciendo el diagnóstico need-check-nil en la extensión de Visual Studio Code con el ejemplo de Lua del issue y, después, sigue la lógica de propagación del nil-check del diagnóstico. Se considera terminado cuando el ejemplo ya no muestra una advertencia sobre item.key, porque la comprobación anterior a través de x ya excluye que item sea nil.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- lua, vscode
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 38/100