LuaLS / LuaLS/lua-language-server
`workspace/symbols` doesn't seem to respect workspaces or rootUri / root_dir
Nessuno ha ancora preso questa issue.
- Lingua principale
- Lua
- Stelle
- 4.4k
- Fork
- 442
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
How are you using the lua-language-server?
NeoVim
Which OS are you using?
MacOS
What is the issue affecting?
Other
Expected Behaviour
- Results should only come from the current project, i.e. that rooted at root_dir, or at the very least only come from the listed workspace folders.
- All symbols appearing in the files named by the above condition should appear in the results (at least,
document/symbolsshould be a subset ofworkspace/symbolsfor any document in the current project)
Actual Behaviour
- Most results come outside root_dir; in fact, most results come from outside any workspace folder, meaning that the results are essentially global.
- Some expected results from within the current workspace don't appear.
For evidence of (1), here's some results fromvim.lsp.buf.workspace_symbol():
# current project, which matches root_dir and is a configured workspace
lua/neogit/status.lua|653 col 3| [Variable] vim.o.autochdir
# from my nvim config, which is not the current root_dir but is a configured workspace
/Users/neilvyas/.config/nvim/lua/plugins/modes.lua|61 col 9| [Variable] vim.opt.background
# from random lua files anywhere on my system; from outside of root_dir or any workspace
/Users/neilvyas/.local/share/nvim/mason/packages/lua-language-server/libexec/meta/Lua 5.4 en-us utf8/io.lua|171 col 11| [Class] file*
For evidence of (2), we can see that document/symbols returns results which workspace/symbols does not (this is actually what clued me into this being a possible bug). For example, the following result from document/symbols, issued from lua/neogit/status.lua, does not appear in workspace/symbols:
lua/neogit/status.lua|506 col 16| [Function] refresh_status_buffer
Reproduction steps
- Configure lua_ls using the recommended instructions from
mason.nvimhttps://github.com/williamboman/mason.nvim#configuration,mason-lspconfig.nvimhttps://github.com/williamboman/mason-lspconfig.nvim, andlspconfig.nvimhttps://github.com/neovim/nvim-lspconfig. - Edit a lua buffer.
- Issue
vim.lsp.buf.workspace_symbol()
Additional Notes
You might think that this issue stems from neovim's LSP client; however, the code related to workspace/symbols is so minimal that I doubt the error arises there: https://github.com/neovim/neovim/blob/v0.8.1/runtime/lua/vim/lsp/handlers.lua#L253
From my cursory investigation of lua_ls's implementation, it seems like the issue might be to do with how allGlobals is populated, since this is ultimately what populates workspace/symbols: https://github.com/LuaLS/lua-language-server/blob/f836d90eb629c22219cbcdff9bfcd7f45f1751f3/script/vm/global.lua#L209
What follows are selections from the output of vim.print(vim.lsp.get_client_by_id(1)), which shows a bunch of data related to how lua_ls is configured by and attached to neovim.
Here, you can see that the root_dir is set properly for the current buffer (editing the neogit plugin), and there are workspaces corresponding to the other buffers I have open (the detour.nvim plugin and editing my neovim configuration, which is written in lua):
This seems to be the problem referenced by the only similar issue I found, #1731 , but I think it indicates that, in fact, that issue does not apply any more, and I cannot udnerstand what the resolution in that issue was anyway.
Here, you can see that the workspace related capabilities seem to be setup properly:
Log File
No response
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con l’implementazione di workspace/symbols e con il popolamento di allGlobals citato in script/vm/global.lua. Riproduci il problema tramite vim.lsp.buf.workspace_symbol() di Neovim usando la configurazione del workspace indicata, quindi confronta i risultati con document/symbols. Il lavoro è completato quando i risultati sono limitati all’ambito del workspace configurato e includono i simboli trovati da document/symbols.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- lua, neovim
- Ambito
- developer-experience, tooling
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 38/100