LuaLS / LuaLS/lua-language-server
`workspace/symbols` doesn't seem to respect workspaces or rootUri / root_dir
還沒有人認領這個 Issue。
- 主要語言
- Lua
- 星號
- 4.4k
- 分支
- 442
- PR 合併指標
- 30 天內沒有已合併 PR
描述
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
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
從 workspace/symbols 的實作以及 script/vm/global.lua 中參照的 allGlobals 填充開始。使用回報的 workspace 設定,透過 Neovim 的 vim.lsp.buf.workspace_symbol() 重現此問題,然後將其結果與 document/symbols 進行比較。當結果僅限於已設定的 workspace 範圍,並包含 document/symbols 找到的符號時,即視為完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- lua, neovim
- 領域
- developer-experience, tooling
- Issue 類型
- 缺陷
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 38/100