LuaLS / LuaLS/lua-language-server
Relative paths do not work with `workspace.library` and `diagnostics.libraryFiles` & `.gitmodules`-related issue
まだ誰も着手していません。
- 主要言語
- Lua
- スター
- 4.4k
- フォーク
- 442
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
How are you using the lua-language-server?
NeoVim
Which OS are you using?
Linux
What is the issue affecting?
Type Checking, Diagnostics/Syntax Checking, Libraries
Expected Behaviour
workspace.library and diagnostics.libraryFiles work together even if workspace.library is a relative path on-disk. All that is needed is the path specified.
If I clone busted / luassert into my repository and point relative paths to those directories, lua-language-server should treat these directories as third-party and will ignore any issues they may have during diagnostics / type-checking.
Original context: https://github.com/jeffzi/llscheck/issues/7
Actual Behaviour
workspace.library and diagnostics.libraryFiles seem to only omit diagnostics if it is given an absolute path. Relative paths are still read into the workspace but lua-language-server still reports issues on them anyway. Effectively diagnostics.libraryFiles is ignored.
Reproduction steps
Jean-Francois nicely provided a minimum reproduction of the issue.
Reproduction Summary
The README.md from the above repository has concise reproduction steps but to further simplify...
- If you run
lua-language-server --check . --logpath logs, it says that there are errors. - There is a
.luarc.jsonin the repository- If you change the
"workspace.library": ["annotations"]to"workspace.library": ["$PWD/annotations"]
- If you change the
- If you run
lua-language-server --check . --logpath logsagain, it succeeds
To conclude, the relative path was not respected but the $PWD-prefixed path is.
Experiments with .gitmodules
I noticed that if you empty out the .gitmodules file or delete it completely, neither relative paths or absolute paths work. lua-language-server will treat any issues within busted / luassert as if they are errors in my project even though they're meant to be third-party.
Additional Notes
It would be very nice if lua-language-server removed the dependency on .gitmodules. A relative path to workspace.library and diagnostics.libraryFiles: "Disable" in my opinion should be all you need to provide for lua-language-server to know not to report diagnostics from there.
Additionally if we could allow relative paths so as to not need to add $PWD that would be nice.
Log File
{
"file:///home/selecaoone/repositories/luals-example/./annotations/luassert/library/luassert/mock.lua": [
{
"code": "cast-local-type",
"message": "This variable is defined as type `luassert.mock`. Cannot convert its type to `function`.\n- `function` cannot match `luassert.mock`\n- Type `function` cannot match `table`\n- Type `function` cannot match `luassert.mock`",
"range": {
"end": {
"character": 13,
"line": 15
},
"start": {
"character": 9,
"line": 15
}
},
"severity": 2,
"source": "Lua Diagnostics."
}
],
"file:///home/selecaoone/repositories/luals-example/./annotations/luassert/library/luassert/stub.lua": [
{
"code": "cast-local-type",
"message": "This variable is defined as type `luassert.stub`. Cannot convert its type to `function`.\n- `function` cannot match `luassert.stub`\n- Type `function` cannot match `table`\n- Type `function` cannot match `luassert.stub`",
"range": {
"end": {
"character": 13,
"line": 12
},
"start": {
"character": 9,
"line": 12
}
},
"severity": 2,
"source": "Lua Diagnostics."
}
]
}
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
リンクされた最小再現例とそのREADME.mdから始め、次にリポジトリの.luarc.jsonを使用してlua-language-server --check . --logpath logsを実行します。workspace.libraryの相対値と$PWDをプレフィックスに付けた値を、.gitmodulesの存在または不在も含めて比較します。相対ライブラリパスとdiagnostics.libraryFilesが.gitmodulesに依存せず、一貫して診断を抑制すれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- lua
- 領域
- devtools
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 42/100