LuaLS / LuaLS/lua-language-server
Relative paths do not work with `workspace.library` and `diagnostics.libraryFiles` & `.gitmodules`-related issue
还没有人认领这个 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 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
先从链接的最小复现及其 README.md 开始,然后使用仓库的 .luarc.json 运行 lua-language-server --check . --logpath logs。比较相对的和带 $PWD 前缀的 workspace.library 值,包括 .gitmodules 的存在或缺失;当相对库路径和 diagnostics.libraryFiles 能够一致地抑制诊断,且不依赖 .gitmodules 时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- lua
- 领域
- devtools
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 42/100