LuaLS / LuaLS/lua-language-server

Relative paths do not work with `workspace.library` and `diagnostics.libraryFiles` & `.gitmodules`-related issue

未关闭
#2,905 8 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 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.json in the repository
    • If you change the "workspace.library": ["annotations"] to "workspace.library": ["$PWD/annotations"]
  • If you run lua-language-server --check . --logpath logs again, 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."
        }
    ]
}

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 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

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。