LuaLS / LuaLS/lua-language-server
`workspace/symbols` doesn't seem to respect workspaces or rootUri / root_dir
まだ誰も着手していません。
- 主要言語
- 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 にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- 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