LuaLS / LuaLS/lua-language-server

`workspace/symbols` doesn't seem to respect workspaces or rootUri / root_dir

オープン
#2,456 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
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
  1. 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.
  2. All symbols appearing in the files named by the above condition should appear in the results (at least, document/symbols should be a subset of workspace/symbols for any document in the current project)
Actual Behaviour
  1. Most results come outside root_dir; in fact, most results come from outside any workspace folder, meaning that the results are essentially global.
  2. 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
  1. Configure lua_ls using the recommended instructions from mason.nvim https://github.com/williamboman/mason.nvim#configuration, mason-lspconfig.nvim https://github.com/williamboman/mason-lspconfig.nvim, and lspconfig.nvim https://github.com/neovim/nvim-lspconfig.
  2. Edit a lua buffer.
  3. 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):

image

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:

image
Log File

No response

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. 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

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。