Add `upvalue` semantic token modifier
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
Línea de trabajo
El issue no menciona archivos ni tests. Empieza localizando la generación de tokens semánticos de LuaLS y la resolución del ámbito léxico utilizada para las referencias a variables; sigue cómo se asigna el modificador global existente. El trabajo estará terminado cuando las referencias resueltas a variables de ámbitos envolventes reciban un modificador upvalue, las declaraciones y las variables locales ordinarias permanezcan sin cambios, y las closures anidadas estén cubiertas por tests.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
LuaLS should expose whether a variable reference is an upvalue through a new upvalue semantic token modifier.
Currently, local variables and upvalues are both reported as:
semantic token type: variable
modifiers: -
while globals are already distinguished using:
semantic token type: variable
modifiers: global
This makes it impossible for editors such as VS Code to visually distinguish local variables from upvalues.
Example
local function outer()
local value = 123
return function()
print(value) -- upvalue
end
end
Currently the value reference inside the inner function is:
variable
It would be useful for LuaLS to report it as:
variable + upvalue
while the declaration remains:
variable
Proposed semantic token model
variable -> local variable
variable + upvalue -> upvalue
variable + global -> global variable
parameter -> function parameter
For example:
local foo = 1
local function outer(bar)
local baz = 2
return function(qux)
print(foo) -- upvalue
print(bar) -- upvalue
print(baz) -- upvalue
print(qux) -- parameter
print(print) -- global
end
end
would produce approximately:
foo -> variable + upvalue
bar -> variable + upvalue
baz -> variable + upvalue
qux -> parameter
print -> variable + global
Ordinary locals would remain simply:
variable
Why a modifier?
A modifier seems preferable to introducing a new semantic token type because upvalue describes a property of a variable reference rather than a fundamentally different kind of symbol.
It also fits the existing LuaLS representation of globals:
variable + global
This gives editor themes a simple way to distinguish all four cases:
variable
variable + upvalue
variable + global
parameter
Scope
The upvalue modifier should be applied to references resolved to a variable declared in an enclosing lexical scope.
For example:
local x = 1
local function f()
print(x)
end
would be:
x declaration -> variable
x reference -> variable + upvalue
Nested closures should work recursively.
Motivation
This would allow VS Code themes to use different colors for locals, parameters, upvalues, and globals, making lexical scope much easier to understand in closure-heavy Lua/LuaJIT code.
LuaLS already performs the necessary lexical-scope resolution; this proposal would expose that information through semantic tokens.
- Lenguaje dominante
- Lua
- Estrellas
- 4.4k
- Forks
- 442
- Merge medio
- 8 d 9 h
- PR fusionados (30 d)
- 1
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.
Más de LuaLS/lua-language-server
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
LuaLS/lua-language-server#1776 ·
-
泛型for迭代器的类型推导漏掉了带__call的类 Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
LuaLS/lua-language-server#3463 · 5 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
LuaLS/lua-language-server#3461 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
LuaLS/lua-language-server#3460 · 1 comentario · 1 reacción ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
LuaLS/lua-language-server#3459 · 1 reacción ·
Todos los issues de LuaLS/lua-language-server
Issues similares
-
Nmap
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
LandSandBoat/server#11579 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100