LuaLS / LuaLS/lua-language-server
The fallback scope pollutes the workpace environment with extraneous definitions.
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?
NeoVim
Which OS are you using?
Linux
What is the issue affecting?
Completion, Diagnostics/Syntax Checking, Hover
Expected Behaviour
When the workspace configuation contains settings that affect which parts of Lua are available (i.e. the runtime.version and runtime.builtin settings); the workspace configuration should entirely take precedence over what's loaded with the fallback scope, here are some examples of behaviour I would expect from the server:
The setup is: runtime.version set to Lua 5.2 in the workspace config and left as default, Lua 5.4 in the server config.
- Hover:
string.byte
--[[Should have this hyperlink in the description:
[View documents](http://www.lua.org/manual/5.2/manual.html#pdf-string.byte)
]]
- Completions:
debug.info(1,
--[[Should show the following completion options:
"n", "S", "l", "t", "u", "f", "L"
]]
- Hover and diagnostics:
utf8 = {}
smuggledChar = utf8.char
smuggledChar --Hover shouldn't show any description
utf8.char() --Diagnostics should stay quiet on this line, as the utf8 library was added in Lua 5.3 and thus it shouldn't know anything about this function as is.
Similar general case, but with the debug library disabled via runtime.builtin in the workspace settings, but left as is in the server config.
4. Hover, completion and diagnostics:
debug = {}
smuggledGetinfo = debug.getinfo
smuggledGetinfo --Shouldn't show any description.
debug.getinfo() --Diagnostics should stay quiet on this line.
debug.getinfo(1, --No completion options should be displayed.
Actual Behaviour
For each of the cases above here's what happens instead:
Same setup as described above, runtime.version set to Lua 5.2 in the workspace config and left as default, Lua 5.4 in the server config:
- Hover:
local test = string.byte
--[[Gives this hyperlink:
[View documents](http://www.lua.org/manual/5.4/manual.html#pdf-string.byte)
5.4 is the wrong version of the manual for this workspace environment
]]
- Completions:
debug.info(1,
--[[Shows the following completion options:
"n", "S", "l", "t", "u", "f", "r", "L", "n", "S", "l", "t", "u", "f", "L"
The "r" option was added in Lua 5.4; what's probably worse is it gives both the Lua 5.4 options and Lua 5.2 options.
]]
- Hover and diagnostics:
utf8 = {}
smuggledChar = utf8.char
smuggledChar --Hover shows the Lua 5.4 documentation description.
utf8.char() --Diagnostics say this function call is missing an argument and the return value cannot be discarded.
Same as in the expected behaviour section, the debug library is disabled via runtime.builtin in the workspace settings, left as is in the server config.
4. Hover, completion and diagnostics:
debug = {}
smuggledGetinfo = debug.getinfo
smuggledGetinfo --Shows debug.getinfo's description.
debug.getinfo() --Diagnostics say this function call is missing an argument and the return value cannot be discarded.
debug.getinfo(1,
--[[
Shows the following completion options:
"n", "S", "l", "t", "u", "f", "r", "L"
]]
Reproduction steps
- Configure
runtime.versionandruntime.builtinas described above; - Input the code snippets above to reproduce.
That's pretty much it
Additional Notes
Additionally I tested the above cases on VS Code via VSCodium and was able to reproduce the same behaviour, but for cases 3 and 4 I didn't even have to smuggle the functions into local variables to get it to show the description, in VS Code the hover system was all too happy to show me definitions for functions that shouldn't exist in my environment. This behaviour might seem generally inconsequential for the language server's uses, but this creates some annoying restrictions for customized Lua environments where one might want to overwrite existing definitions for libraries; for example MoonSharp (an embeddable C# Lua interpreter, most commonly used in Unity projects) is only able to provide partial support for some libraries (like os and debug) on some platforms (again, Unity) and also gives the option to override the libraries; anyone who wishes to provide proper documentation for any changes to the standard libraries has to also get the user to change their server's settings in order to turn a library off entirely so the new definitions can be properly applied without any pollution for the specific workspace.
Log File
No response
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
Commencez par reproduire les extraits fournis de hover, completion et diagnostic avec des valeurs de serveur et de workspace en conflit pour runtime.version et runtime.builtin. Suivez le chargement du scope de fallback et sa comparaison avec les paramètres du workspace ; le travail est considéré comme terminé lorsque les paramètres du workspace suppriment entièrement les définitions, la documentation, les diagnostics et les options de completion de fallback incompatibles.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- lua
- Domaine
- developer-experience, tooling
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100